Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Désimbrication du schéma
Lors de l'intégration à des services d'analyse via Zero-ETL, vous pouvez choisir la manière dont les structures imbriquées sont représentées dans les tables cibles. AWS Glue Zero-ETL propose des options de désimbrication des schémas pour aplatir les structures de données complexes dans des formats plus adaptés aux analyses.
Options de désimbrication
Lorsque vous créez une intégration zéro ETL avec une source, vous pouvez choisir l’une des options de désimbrication suivantes. Ces options correspondent à des valeurs d'énumération spécifiques que vous utiliserez lors de l'appel de l' CreateIntegrationTableProperty API. Pour toutes les options indésirables, nous passerons à la couche la plus interne et mapperons le type DDB au type spark/iceberg primitif cible en faisant de notre mieux. Le mappage de type entre le DDB source et la table cible est le suivant :
| Type de données source DDB | Type de données de table cible |
|---|---|
"S" | StringType |
"B" | BinaryType |
"N" | DoubleType |
"BOOL" | BooleanType |
"SS" | ArrayType(StringType) |
"NS" | ArrayType(DoubleType) |
"BS" | ArrayType(BinaryType) |
"L" | ArrayType(StringType) |
"NULL" | Ignorer |
"M" | StructType (TOP/NOM) |
- Pas de dénidification - NO_UNNEST
-
Valeur d’API :
NO_UNNESTPréserve la structure imbriquée d'origine des éléments Amazon DynamoDB. Les cartes et les listes sont stockées sous forme de colonnes structurées dans la cible.
Idéal pour : préserver la structure exacte de vos données Amazon DynamoDB lorsque vos outils d'analyse peuvent fonctionner avec des données imbriquées.
- Niveau supérieur - TOP_LEVEL
-
Valeur d’API :
TOP_LEVELAplatit le niveau supérieur des cartes imbriquées en colonnes individuelles. Les structures de listes restent imbriquées.
Préserve la structure exacte de vos données Amazon DynamoDB lorsque vos outils d'analyse peuvent fonctionner avec des données imbriquées, toutes les informations de type DDB étant supprimées.
Idéal pour : trouver un équilibre entre la préservation de la structure des données et la simplicité des requêtes lorsque les éléments de votre table Amazon DynamoDB ont un schéma cohérent.
- Démanteler tous les niveaux : COMPLET (par défaut)
-
Valeur d’API :
FULLAplatit de manière récursive toutes les structures imbriquées (cartes et listes) en colonnes individuelles avec notation par points pour la dénomination.
Idéal pour : optimiser la simplicité des requêtes lorsque vous travaillez avec des structures profondément imbriquées et des outils d’analytique privilégiant les schémas plats.
Note
Une désimbrication complète peut donner lieu à des tables très larges comportant de nombreuses colonnes si vos données DynamoDB présentent des structures variables ou profondément imbriquées.
Exemple Utilisation des options de désimbrication dans l’API
Lors de la configuration de la désimbrication du schéma via l' CreateIntegrationTableProperty API, spécifiez l'option de désimbrication dans le paramètre : 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", } }'
Exemples de désimbrication
Prenons l’exemple d’un élément DynamoDB dont la structure est la suivante :
// Input DynamoDB Record { "Item": { "col_1": { "S": "value_1" }, "col_2": { "M": { "col_3": { "M": { "id": { "S": "value_3" } } }, "col_4": { "BOOL": true } } } } }
Exemple NO_UNNEST
Avec NO_UNNEST, la ligne entière est stockée dans une colonne plus la clé primaire. Les informations de type DynamoDB sont préservées. Cela permet de maintenir la compatibilité avec les modèles de requêtes Redshift.
Table Iceberg résultante (en supposant que col_1 est la clé primaire) :
| col_1 (chaîne) | valeur (structure) |
|---|---|
| valeur_1 |
|
Les requêtes devraient utiliser des modèles d’accès aux structures et aux tableaux :
SELECT value.col_1, value.col_2.M.col_3.M.id.S, value.col_2.M.col_4.BOOL FROM product_table;
Exemple TOP_LEVEL
Avec TOP_LEVEL, seuls les champs de niveau supérieur ne sont pas imbriqués tout en conservant les champs imbriqués intacts sous forme de structures. Les informations de type DynamoDB sont supprimées et la saisie est conservée. Convertit en type chaîne en cas de conflit de schéma.
Table Glue résultante après réplication :
| col_1 (chaîne) | col_2 (structure) |
|---|---|
| valeur_1 |
|
Les requêtes seraient simplifiées pour le premier niveau :
SELECT col_1, col_2.col_3.id, col_2.col_4 FROM product_table;
Exemple complet
En cas de désimbrication COMPLÈTE, les champs de premier niveau et les champs imbriqués sont aplatis. struct/map La notation par points est utilisée pour les champs imbriqués (par exemple, « col_2.col_3.id »). Les éléments du tableau ne sont pas imbriqués. Chaque nœud de feuille devient une colonne de niveau supérieur.
Table Glue résultante après réplication :
| col_1 (chaîne) | col_2.col_3.id (chaîne de caractères) | col_2.col_4 (booléen) |
|---|---|---|
| valeur_1 | valeur_3 | TRUE |
Les requêtes seraient entièrement aplaties :
SELECT col_1, "col_2.col_3.id", "col_2.col_4" FROM product_table;