Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Disnidificazione dello schema
Quando ti integri con i servizi di analisi tramite Zero-ETL, puoi scegliere in che modo le strutture annidate vengono rappresentate nelle tabelle di destinazione. AWS Glue Zero-ETL offre opzioni di unnesting dello schema per appiattire strutture di dati complesse in formati più intuitivi per l'analisi.
Opzioni di disnidificazione
Quando si crea un'integrazione Zero-ETL con un'origine, è possibile scegliere tra le seguenti opzioni di disnidificazione. Queste opzioni corrispondono a valori di enumerazione specifici che utilizzerai per chiamare l'API. CreateIntegrationTableProperty Per tutte le opzioni non necessarie, passeremmo alla maggior parte del livello interno e mapperemmo il tipo DDB per indirizzarlo al tipo primitivo con il massimo sforzo. spark/iceberg La mappatura dei tipi tra il DDB di origine e la tabella di destinazione è la seguente:
| Tipo di dati di origine DDB | Tipo di dati della tabella di destinazione |
|---|---|
"S" | StringType |
"B" | BinaryType |
"N" | DoubleType |
"BOOL" | BooleanType |
"SS" | ArrayType(StringType) |
"NS" | ArrayType(DoubleType) |
"BS" | ArrayType(BinaryType) |
"L" | ArrayType(StringType) |
"NULL" | Ignorare |
"M" | StructType (TOP/SOSTANTIVO) |
- Nessun annidamento - NO_UNNEST
-
Valore API:
NO_UNNESTConserva la struttura nidificata originale degli elementi di Amazon DynamoDB. Le mappe e gli elenchi vengono memorizzati come colonne strutturate nella destinazione.
Ideale per: preservare l'esatta struttura dei dati di Amazon DynamoDB quando gli strumenti di analisi possono funzionare con dati annidati.
- Livello superiore: TOP_LEVEL
-
Valore API:
TOP_LEVELAppiattisce il livello superiore delle mappe nidificate in singole colonne. Le strutture degli elenchi rimangono annidate.
Conserva l'esatta struttura dei dati di Amazon DynamoDB quando gli strumenti di analisi possono funzionare con dati annidati con tutte le informazioni di tipo DDB rimosse.
Ideale per: bilanciare tra la conservazione della struttura dei dati e la semplicità delle query quando gli elementi della tabella Amazon DynamoDB hanno uno schema coerente.
- Unnest tutti i livelli - FULL (impostazione predefinita)
-
Valore API:
FULLAppiattisce in modo ricorsivo tutte le strutture annidate (mappe ed elenchi) in singole colonne con notazione a punti per la denominazione.
Ideale per: massimizzare la semplicità delle query quando si lavora con strutture e strumenti di analisi profondamente annidati che preferiscono schemi piatti.
Nota
La disnidificazione completa può portare a tabelle molto ampie con molte colonne se i dati DynamoDB hanno strutture variabili o profondamente annidate.
Esempio Utilizzo delle opzioni di disnidificazione nell'API
Quando configuri il unnesting dello schema tramite l' CreateIntegrationTableProperty API, specifica l'opzione di unnesting nel parametro: UnnestSpec
aws glue create-integration-table-property --resource-arn "arn:aws:glue:us-east-1:123456789012:database/my_db" --table-name "my-table" --cli-input-json '{ "TargetTableConfig": { "UnnestSpec": "FULL", "TargetTableName": "my-target-table", } }'
Esempi di disnidificazione
Si consideri un elemento di DynamoDB con la seguente struttura:
// Input DynamoDB Record { "Item": { "col_1": { "S": "value_1" }, "col_2": { "M": { "col_3": { "M": { "id": { "S": "value_3" } } }, "col_4": { "BOOL": true } } } } }
Esempio NO_UNNEST
Con NO_UNNEST, l'intera riga viene memorizzata all'interno di una colonna più la chiave primaria. Le informazioni sul tipo DynamoDB vengono conservate. Ciò mantiene la compatibilità con i pattern di interrogazione di Redshift.
Tabella Iceberg risultante (supponendo che col_1 sia la chiave primaria):
| col_1 (stringa) | valore (struttura) |
|---|---|
| valore_1 |
|
Le query dovrebbero utilizzare modelli di accesso a strutture e array:
SELECT value.col_1, value.col_2.M.col_3.M.id.S, value.col_2.M.col_4.BOOL FROM product_table;
Esempio TOP_LEVEL
Con TOP_LEVEL, solo i campi di primo livello non vengono annidati, mantenendo intatti i campi nidificati come strutture. Le informazioni sul tipo DynamoDB vengono rimosse e la digitazione viene mantenuta. Converte in tipo stringa quando si verificano conflitti di schema.
Tabella Glue risultante dopo la replica:
| col_1 (stringa) | col_2 (struttura) |
|---|---|
| valore_1 |
|
Le query sarebbero semplificate per il primo livello:
SELECT col_1, col_2.col_3.id, col_2.col_4 FROM product_table;
Esempio COMPLETO
Con l'unnesting FULL, sia i campi di primo livello che i campi nidificati vengono appiattiti. struct/map La notazione a punti viene utilizzata per i campi annidati (ad esempio, «col_2.col_3.id»). Gli elementi dell'array rimangono non annidati. Ogni nodo foglia diventa una colonna di primo livello.
Tabella Glue risultante dopo la replica:
| col_1 (stringa) | col_2.col_3.id (stringa) | col_2.col_4 (booleano) |
|---|---|---|
| valore_1 | valore_3 | TRUE |
Le query verrebbero completamente appiattite:
SELECT col_1, "col_2.col_3.id", "col_2.col_4" FROM product_table;