Comment empêcher le crawler AWS Glue de créer plusieurs tables ?

Lecture de 6 minute(s)
0

Pourquoi le crawler AWS Glue crée-t-il plusieurs tables à partir de mes données sources, et comment éviter que cela ne se produise ?

Brève description

Lors de la première exécution du crawler AWS Glue, il lit les 1000 premiers enregistrements ou le premier mégaoctet de chaque fichier. Il le fait pour déduire le schéma. La quantité de données que le crawler lit dépend du format du fichier et de la disponibilité d'un enregistrement valide.

Par exemple, si le fichier d'entrée est un fichier JSON, le crawler lit le premier Mo du fichier pour déduire le schéma. Si le crawler lit un enregistrement valide dans le premier Mo du fichier, le crawler déduit le schéma. Si le crawler ne parvient pas à déduire le schéma après avoir lu les 1 premiers Mo, il lit au maximum 10 Mo du fichier. Il le fait par incréments de 1 Mo.

Pour les fichiers CSV, le crawler lit soit les 1000 premiers enregistrements, soit le premier Mo de données, selon la première occurrence. Pour les fichiers Parquet, le crawler déduit le schéma directement à partir du fichier.

Le crawler compare les schémas déduits de tous les sous-dossiers et fichiers, puis crée une ou plusieurs tables.

Le crawler AWS Glue crée plusieurs tables lorsque vos fichiers de données sources n'utilisent pas les mêmes configurations :

  • Format (tel que CSV, Parquet ou JSON)
  • Type de compression (par exemple, SNAPPY, gzip ou bzip2)
  • Schéma
  • Structure des partitions Amazon Simple Storage Service (Amazon S3)

Résolution

Vérifiez les journaux de l'analyseur

Vérifiez les journaux de l'analyseur pour identifier les fichiers qui entraînent la création de plusieurs tables par l'analyseur :

1.    Ouvrez la console AWS Glue.

2.    Dans le panneau de navigation, choisissez Crawlers (Analyseurs).

3.    Choisissez le crawler pour lequel vous souhaitez consulter les journaux.

4.    Cliquez sur le lien Logs (Journaux) pour afficher les journaux de la console Amazon CloudWatch.

5.    Si AWS Glue a créé plusieurs tables lors de la précédente exécution du crawler, alors le journal contiendra des entrées similaires aux suivantes :

[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_24cab769_750d_4ef0_9663_0cc6228ac858_c000_snappy_parquet in
 database glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_3518b196_caf5_481f_ba4f_3e968cbbdd67_c000_snappy_parquet in
 database glue
[439d6bb5-ce7b-4fb7-9b4d-805346a37f88]
 INFO : Created table 
2_part_00000_6d2fffc2_a893_4531_89fa_72c6224bb2d6_c000_snappy_parquet in
 database glue

Les entrées du journal comprennent les noms des fichiers qui entraînent la création de plusieurs tables par le crawler.

Empêcher la création de plusieurs tables

Pour empêcher la création de plusieurs tables, effectuez l'une des actions suivantes :

Confirmez que tous les fichiers de données utilisent le même schéma, format et type de compression.

Dans certains cas, les fichiers utilisent des schémas différents. Par exemple, le schéma A peut indiquer 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, effectuez l'une des actions suivantes :

  • Exécutez une tâche Extraction, transformation et chargement (ETL) AWS Glue pour lire les données aberrantes au moyen de la fonction from_options. Ensuite, transformez les types de données aberrantes en types de données corrects ou les plus courants dans votre source.
  • Utilisez la DDL de table existante pour créer manuellement la table dans Amazon Athena. Exécutez ensuite un crawler AWS Glue pour mettre à jour les métadonnées de la table. Utilisez le paramètre du crawler pour hériter du schéma de la table.

Combinez des schémas compatibles lorsque vous créez le crawler

Le crawler déduit le schéma au niveau des dossiers et compare les schémas dans tous les dossiers. Le crawler 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 crawler crée une table pour chaque dossier, ce qui entraîne un nombre plus élevé de tables.

Vos données pourraient présenter des schémas distincts dans certains fichiers d'entrée et des schémas similaires dans d'autres fichiers. Lorsque vous créez le crawler, vous pouvez combiner des schémas compatibles. Sur la page Configure the crawler output (Configurer la sortie du crawler), sous Grouping behavior for S3 data (optional) (Regrouper le comportement des données S3 (facultatif), sélectionnez Create a single schema for each S3 path (Créer un schéma unique pour chaque chemin S3). Lorsque vous activez ce paramètre et les données sont compatibles, le crawler ignore la similarité des schémas spécifiques lors de l'évaluation des objets Amazon S3 dans le chemin.

Pour plus d'informations, consultez Comment créer un schéma unique pour chaque chemin d'inclusion Amazon S3.

Vérifiez si vos fichiers d'entrée ont des chemins Amazon S3 différents

Lorsque la structure du préfixe Amazon S3 n'est pas cohérente, le crawler considère chaque chemin individuel comme une table individuelle. Le crawler crée ensuite plusieurs tables. Si vos fichiers d'entrée ont des structures ou chemins Amazon S3 différents, le crawler crée plusieurs tables. Il s'agit du comportement par défaut du crawler.

Par exemple, supposons qu’un crawler analyse un chemin S3 s3://doc-example-bucket/doc-example-key/doc-example-table avec une structure de partition similaire à la 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 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 crawler crée ensuite cinq tables individuelles lors d'une autre exécution. Cela se produit parce que la structure de la partition des dossiers n'est pas cohérente.

Pour éviter ce problème, passez en revue les meilleures pratiques suivantes :

  • Assurez-vous que ce schéma est cohérent manuellement ou programmatiquement. Dans l’exemple précédent, vous pouvez soit supprimer les fichiers S3 sans la partition dt=xxxx-xx-xx, soit ajouter la partition pour les fichiers doc-example-file4.csv et doc-example-file5.csv.
  • Utilisez un modèle d'exclusion pour exclure les fichiers ou dossiers indésirables.

Utiliser des en-têtes cohérents

Lorsque vous utilisez des données CSV, utilisez des en-têtes de manière cohérente. Si certains de vos fichiers ont des en-têtes et d'autres non, le crawler créera plusieurs tables.


Informations connexes

Gestion des partitions pour la sortie ETL dans AWS Glue

Définition des options de configuration de l'analyseur

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an
Aucun commentaire