View a markdown version of this page

Désimbrication du schéma - AWS Glue

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 DDBType 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_UNNEST

Pré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_LEVEL

Aplatit 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 : FULL

Aplatit 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
{ "col_2": { "M": { "col_3": { "M": { "id": { "S": "value_3" } } }, "col_4": { "BOOL": true } } } }

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
{ "col_3": { "id": "value_3" }, "col_4": true }

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;