Mise à jour du schéma et ajout de nouvelles partitions dans le catalogue de données à l’aide des tâches AWS Glue ETL
Votre travail d'extraction, de transformation et de chargement (ETL) peut créer de nouvelles partitions de table dans le magasin de données cible. Votre schéma de jeu de données peut évoluer et diverger du schéma de catalogue de données AWS Glue avec le temps. AWS Glue Les tâches ETL fournissent désormais plusieurs fonctions que vous pouvez utiliser dans votre script ETL pour mettre à jour votre schéma et vos partitions dans le catalogue de données. Ces fonctions vous permettent de voir les résultats de votre tâche ETL dans le catalogue de données, sans avoir à exécuter à nouveau l'crawler.
Nouvelles partitions
Si vous souhaitez afficher les nouvelles partitions dans le AWS Glue Data Catalog, vous pouvez effectuer l'une des opérations suivantes :
-
Une fois la tâche terminée, réexécutez l'crawler pour afficher les nouvelles partitions sur la console.
-
Une fois la tâche terminée, affichez immédiatement les nouvelles partitions sur la console, sans avoir à réexécuter l'crawler. Pour activer cette fonctionnalité, ajoutez quelques lignes de code au script ETL, comme illustré dans les exemples suivants. Le code utilise l'argument
enableUpdateCatalogpour indiquer que le catalogue de données doit être mis à jour pendant l'exécution de la tâche lors de la création des partitions.
- Méthode 1 :
-
Transmettez
enableUpdateCatalogetpartitionKeysdans un argument d'options. - Méthode 2 :
-
Transmettez
enableUpdateCatalogetpartitionKeysdansgetSink()et appelezsetCatalogInfo()au niveau de l'objetDataSink.
Maintenant, vous pouvez créer des tables de catalogue, mettre à jour les tables existantes avec le schéma modifié et ajouter de nouvelles partitions de table au catalogue de données à l'aide d'une tâche ETL AWS Glue, sans avoir besoin de relancer les crawlers.
Mise à jour du schéma de table
Si vous souhaitez remplacer le schéma de la table du catalogue de données, vous pouvez effectuer l'une des opérations suivantes :
Une fois la tâche terminée, exécutez à nouveau l’crawler et assurez-vous que celui-ci est configuré pour mettre à jour également la définition de la table. Affichez les nouvelles partitions sur la console ainsi que les mises à jour de schéma lorsque l'crawler se termine. Pour plus d'informations, consultez Configuration d'un crawler utilisant l'API.
Une fois la tâche terminée, affichez immédiatement le schéma modifié sur la console, sans avoir à exécuter de nouveau l'crawler. Pour activer cette fonctionnalité, ajoutez quelques lignes de code au script ETL, comme illustré dans les exemples suivants. Le code utilise
enableUpdateCatalogdéfini sur true etupdateBehaviordéfini surUPDATE_IN_DATABASE, ce qui indique que le schéma doit être remplacé et que de nouvelles partitions doivent être ajoutées au catalogue de données pendant l'exécution de la tâche.
Vous pouvez également définir la valeur de updateBehavior sur LOG si vous souhaitez empêcher le remplacement du schéma de table, mais que vous souhaitez toujours ajouter les nouvelles partitions. Comme la valeur par défaut de updateBehavior est UPDATE_IN_DATABASE, si vous ne le définissez pas explicitement, le schéma de table est remplacé.
Si enableUpdateCatalog n'a pas la valeur true, quelle que soit l'option sélectionnée pour updateBehavior, la tâche ETL ne mettra pas à jour la table dans le catalogue de données.
Création de tables
Vous pouvez également utiliser les mêmes options pour créer une table dans le catalogue de données. Vous pouvez spécifier la base de données et le nouveau nom de table avec setCatalogInfo.
Restrictions
Prenez note des restrictions suivantes :
-
Seules des cibles Amazon Simple Storage Service (Amazon S3) sont prises en charge.
-
La fonctionnalité
enableUpdateCatalogn'est pas prise en charge pour les tables gouvernées. -
Seuls les formats suivants sont pris en charge :
json,csv,avroetparquet. -
Pour créer ou mettre à jour des tables avec la classification
parquet, vous devez utiliser l'enregistreur parquet optimisé AWS Glue pour DynamicFrames. Cela peut être réalisé à l'aide d'un des moyens suivants :-
Si vous mettez à jour une table existante dans le catalogue avec la classification
parquet, la propriété de la table"useGlueParquetWriter"doit être définie surtrueavant que vous ne la mettiez à jour. Vous pouvez définir cette propriété via les API ou le kit SDK AWS Glue, via la console ou via une instruction DDL Athena.
Une fois la propriété de la table de catalogue définie, vous pouvez utiliser l'extrait de code suivant pour mettre à jour la table de catalogue avec les nouvelles données :
glueContext.write_dynamic_frame.from_catalog( frame=frameToWrite, database="dbName", table_name="tableName", additional_options={ "enableUpdateCatalog": True, "updateBehavior": "UPDATE_IN_DATABASE" } ) -
Si la table n'existe pas déjà dans le catalogue, vous pouvez utiliser la méthode
getSink()de votre script avecconnection_type="s3"pour ajouter la table et ses partitions au catalogue, ainsi que pour écrire les données sur Amazon S3. Fournissez lespartitionKeyset lacompressionappropriés pour votre flux de travail.s3sink = glueContext.getSink( path="s3://bucket/folder/", connection_type="s3", updateBehavior="UPDATE_IN_DATABASE", partitionKeys=[], compression="snappy", enableUpdateCatalog=True ) s3sink.setCatalogInfo( catalogDatabase="dbName", catalogTableName="tableName" ) s3sink.setFormat("parquet", useGlueParquetWriter=True) s3sink.writeFrame(frameToWrite) -
glueparquetLa valeur de format est une méthode traditionnelle permettant d'activerAWS Glue le dispositif d'écriture de parquet
-
-
Quand
updateBehaviora la valeurLOG, de nouvelles partitions sont ajoutées uniquement si le schémaDynamicFrameest équivalent ou qu'il contient un sous-ensemble des colonnes définies dans le schéma de la table du catalogue de données. -
Les mises à jour du schéma ne sont pas prises en charge pour les tables non partitionnées (qui n'utilisent pas l'option « partitionKeys »).
-
Vos clés de partition (partitionKeys) doivent être équivalentes, et dans le même ordre, entre votre paramètre passé dans votre script ETL et les clés de partition (partitionKeys) du schéma de votre table du catalogue de données.
-
Cette fonction ne prend pas encore en charge la mise à jour/création de tables dans lesquelles les schémas de mise à jour sont imbriqués (par exemple, les tableaux à l'intérieur de structures).
Pour plus d’informations, consultez Programmation de scripts Spark.