New user sign up using AWS Builder ID
New user sign up using AWS Builder ID is currently unavailable on re:Post. To sign up, please use the AWS Management Console instead.
Comment empêcher la création de plusieurs tables lors de l'exécution d'un robot AWS Glue ?
Le robot AWS Glue crée plusieurs tables à partir de mes données source. Je veux savoir ce que je peux faire afin que cette situation ne se reproduise pas.
Brève description
Lors de la première exécution du robot AWS Glue, celui-ci lit les 1 000 premiers enregistrements ou le premier mégaoctet de chaque fichier pour en déduire le schéma. La quantité de données lue par le robot dépend du format de fichier et de la disponibilité d'un enregistrement valide.
Par exemple, si l'entrée est un fichier JSON, le robot lit le premier Mo du fichier. Si le robot lit un enregistrement valide dans le premier Mo du fichier, il en déduit le schéma. Si le robot ne parvient pas à déduire le schéma, il lit un maximum de 10 Mo du fichier par incréments de 1 Mo.
Pour les fichiers .csv, le robot lit les 1 000 premiers enregistrements ou le premier Mo de données en fonction de celui qui apparaît en premier. Pour les fichiers Parquet, le robot déduit le schéma directement du fichier.
Le robot compare les schémas qu'il déduit de tous les sous-dossiers et fichiers, puis crée des tables.
Lorsque vos fichiers de données source n'utilisent pas les mêmes configurations pour les paramètres suivants, le robot crée plusieurs tables :
- Format, tel que .csv, Parquet ou JSON
- Type de compression, tel que SNAPPY, gzip ou bzip2
- Schéma
- Structure des partitions Amazon Simple Storage Service (Amazon S3)
Résolution
Vérifier les journaux du robot
Pour identifier les fichiers à l'origine de la création de plusieurs tables par le robot, procédez comme suit :
- Ouvrez la console AWS Glue.
- Dans le volet de navigation, sélectionnez Robots.
- Sélectionnez le robot que vous souhaitez examiner.
- Cliquez sur le lien Journaux pour afficher les journaux sur la console Amazon CloudWatch.
Si AWS Glue a créé plusieurs tables lors de la précédente exécution du robot, le journal inclut des entrées similaires aux entrées suivantes :
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88] INFO : Table créée
2_part_00000_24cab769_750d_4ef0_9663_0cc6228ac858_c000_snappy_parquet dans
la base de données Glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88] INFO : Table créée
2_part_00000_3518b196_caf5_481f_ba4f_3e968cbbdd67_c000_snappy_parquet dans
la base de données Glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88] INFO : Table créée
2_part_00000_6d2fffc2_a893_4531_89fa_72c6224bb2d6_c000_snappy_parquet dans
la base de données Glue
Les entrées du journal incluent les noms de fichiers qui amènent le robot à créer plusieurs tables.
Empêcher la création de plusieurs tables
Pour empêcher la création de plusieurs tables, effectuez l'une des actions suivantes en fonction de votre cas d'utilisation.
Vérifiez que les fichiers de données utilisent le même schéma, le même format et le même type de compression
Dans certains cas, les fichiers utilisent des schémas différents. Par exemple, le schéma A indique que le champ X est de type INT et le schéma B indique que le champ X est de type BOOL.
Dans ce cas d'utilisation, utilisez la fonction from_options pour exécuter une tâche d'extraction, de transformation et de chargement (ETL) AWS Glue afin de lire les données aberrantes. Puis, transformez les types de données aberrants en types de données corrects ou les plus courants dans votre source.
Vous pouvez également utiliser la table DDL existante pour créer manuellement la table dans Amazon Athena. Exécutez ensuite un robot AWS Glue pour mettre à jour les métadonnées de la table. Configurez le robot afin qu'il ne remplace pas le schéma existant de la table.
Combiner des schémas compatibles lorsque vous créez le robot
Le robot déduit le schéma au niveau du dossier et compare les schémas de tous les dossiers. Le robot vérifie si les schémas correspondent et si le seuil de partition est supérieur à 70 %. S'ils correspondent, les schémas sont désignés comme des partitions d'une table. S'ils ne correspondent pas, le robot crée une table pour chaque dossier. Il en résulte un plus grand nombre de tables.
Vos données peuvent présenter des schémas différents dans certains fichiers d'entrée et des schémas similaires dans d'autres fichiers. Lorsque vous créez le robot, combinez des schémas compatibles.
Sur la page Configurer la sortie du robot de la console AWS Glue, sous Comportement de regroupement pour les données S3 (facultatif), sélectionnez Créer un schéma unique pour chaque chemin S3. Si les données sont compatibles, le robot ignore la similarité des schémas lorsqu'il évalue les objets Amazon S3 dans le chemin.
Pour plus d'informations, consultez la section Création d'un schéma unique pour chaque chemin d'inclusion Amazon S3.
Vérifier si vos fichiers d'entrée ont des chemins Amazon S3 différents
Lorsque la structure contenue dans le préfixe Amazon S3 n'est pas cohérente, le robot considère chaque chemin comme une table individuelle. Le robot crée ensuite plusieurs tables. Si vos fichiers d'entrée ont des structures ou des chemins Amazon S3 différents, le robot crée plusieurs tables par défaut.
Par exemple, vous exécutez un robot sur le chemin Amazon S3 s3://doc-example-bucket/doc-example-key/doc-example-table avec une structure de partition similaire à la structure suivante :
- s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-20/doc-example-file1.csv
- s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-21/dox-example-file2.csv
- s3://doc-example-bucket/doc-example-key/doc-example-table/dt=2020-08-22/doc-example-file3.csv
Vous ajoutez ensuite les fichiers suivants aux trois fichiers précédents :
- s3://doc-example-bucket/doc-example-key/doc-example-table/dox-example-file4.csv
- s3:// doc-example-bucket/doc-example-key/doc-example-table/doc-example-file5.csv
Le robot crée cinq tables individuelles lors d'une autre exécution car la structure de partition des dossiers n'est pas cohérente.
Pour éviter ce problème, vérifiez manuellement ou par programmation que le schéma est cohérent. Dans l'exemple précédent, vous supprimez les fichiers Amazon S3 sans la partition dt=xxxx-xx-xx ou vous ajoutez la partition pour les fichiers doc-example-file4.csv et doc-example-file5.csv. Pour exclure les fichiers ou dossiers indésirables, utilisez un modèle d'exclusion.
Utiliser des en-têtes cohérents
Lorsque vous utilisez des données au format .csv, utilisez systématiquement des en-têtes. Si certains de vos fichiers comportent des en-têtes et d'autres pas, le robot crée plusieurs tables.
Supprimer plusieurs tables créées par un robot
Filtrez les tables issues du robot exécuté dans vos journaux CloudWatch. Puis, appelez l’API BatchDeleteTable pour supprimer les tables.
Procédez comme suit :
- Ouvrez la console AWS Glue.
- Dans le volet de navigation, sélectionnez Robots.
- Dans Exécutions du robot, sélectionnez le nom du robot cible.
- Sélectionnez Afficher les informations de l'exécution.
- Sur la page Informations d’exécution du robot, notez l'ID de l'exécution du robot à utiliser dans l'appel BatchDeleteTable.
- Sélectionnez Journaux CloudWatch, puis sélectionnez le groupe de journaux /aws-glue/crawlers.
- Choisissez Actions, puis sélectionnez Exporter les données vers Amazon S3.
- Saisissez les informations suivantes pour exporter les données :
Pour la plage de temps, utilisez les heures de début et de fin d’exécution du robot.
Pour le préfixe de flux, ajoutez le nom du robot.
Sélectionnez votre compartiment S3 cible et son préfixe pour exporter les journaux d'exécution du robot. - Pour le groupe de journaux /aws-glue/crawlers, sélectionnez Actions, puis Afficher toutes les exportations vers Amazon S3.
- Sélectionnez la tâche d'exportation pour le groupe de journaux /aws-glue/crawlers et le compartiment S3 cible.
- Sélectionnez Afficher dans Amazon S3.
- Sur la console Amazon S3, choisissez le dossier portant le nom du robot cible.
- Téléchargez le fichier journal exporté au format .gz sur votre machine locale ou sur une instance Amazon Elastic Compute Cloud (Amazon EC2). Puis, décompressez le fichier vers un chemin local. Notez l'emplacement du chemin à utiliser dans l'appel BatchDeleteTable.
- Pour filtrer les tables, analysez le fichier décompressé depuis votre machine locale ou votre instance EC2.
- Appelez l'API BatchDeleteTable AWS Glue pour supprimer les tables.
Exemple de script :
import boto3 import re # input parameters catalogId='CatalogId' database = 'databaseName' crawlId= 'crawlRunId' logFilePath = 'local_decompressed_file_path' # function to extract the created tables by the given crawl run id in target database def extract_table_info(file_path, target_crawl_id, target_database): list_tables = [] with open(file_path, 'r') as file: for line in file: match = re.search(f'.*\\[{target_crawl_id}\\] INFO : Created table (\\w+(?:_[a-f0-9]+)*) in database {target_database}', line) if match: table_name = match.group(1) list_tables.append(table_name) return list(set(list_tables)) createdTables = extract_table_info(logFilePath, crawlId, database) # initialize the Glue client and make batch_delete_table API calls to delete the created tables client = boto3.client('glue') for i in range(len(createdTables) // 100 + 1): tables_to_delete = createdTables[100 * i : 100 * (i + 1)] response = client.batch_delete_table( CatalogId=catalogId, DatabaseName=database, TablesToDelete=tables_to_delete ) print(i) print(response)
Remarque : Remplacez les exemples de paramètres d'entrée par vos paramètres d'entrée. L'exemple de script précédent utilise le paramètre de région AWS par défaut sur votre machine locale ou instance EC2. Pour modifier la région dans boto3, consultez la section Configuration.
Informations connexes
Gestion des partitions pour la sortie ETL dans AWS Glue
Personnalisation du comportement du robot
Exporter les données du journal vers Amazon S3 à l'aide de la console

Contenus pertinents
- demandé il y a 10 moislg...
- demandé il y a 10 moislg...
- demandé il y a un anlg...
- demandé il y a 2 anslg...
- AWS OFFICIELA mis à jour il y a 4 ans
- AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a 3 ans
- AWS OFFICIELA mis à jour il y a 3 ans