Bonnes pratiques lors de l'utilisation d'Athena avec AWS Glue - Amazon Athena

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.

Bonnes pratiques lors de l'utilisation d'Athena avec AWS Glue

Lorsque vous utilisez Athéna avec le AWS Glue Data Catalog, vous pouvez l'utiliser AWS Glue pour créer des bases de données et des tables (schéma) à interroger dans Athéna, ou vous pouvez utiliser Athéna pour créer un schéma, puis les utiliser dans des services connexes. AWS Glue Cette rubrique fournit des considérations et les bonnes pratiques sur l'utilisation de l'une ou l'autre méthode.

En coulisses, Athena utilise Trino pour traiter les instructions DML et Hive pour traiter les instructions DDL qui créent et modifient le schéma. Avec ces technologies, il y a quelques conventions à suivre pour qu'Athéna et moi AWS Glue travaillons bien ensemble.

Dans cette rubrique

Noms de bases de données, de tables et de colonnes

Lorsque vous créez un schéma dans AWS Glue une requête dans Athéna, tenez compte des points suivants :

  • Un nom de base de données ne peut pas dépasser 255 caractères.

  • Un nom de table ne peut pas dépasser 255 caractères.

  • Un nom de colonne ne peut pas dépasser 255 caractères.

  • Les seuls caractères acceptables pour les noms de base de données, les noms de table et les noms de colonne sont les lettres minuscules, les chiffres et le caractère de soulignement.

Pour de plus amples informations, consultez TRUNCATE et DROP TABLE dans le Guide du développeurAWS Glue .

Note

Si vous utilisez un AWS::Glue::Database AWS CloudFormation modèle pour créer une AWS Glue base de données et que vous ne spécifiez pas de nom de base de données, génère AWS Glue automatiquement un nom de base de données au format resource_name—random_string incompatible avec Athena.

Vous pouvez utiliser le gestionnaire de AWS Glue catalogue pour renommer les colonnes, mais pas les noms de tables ou de bases de données. Pour contourner cette limitation, vous devez utiliser une définition de l'ancienne base de données pour créer une base de données portant le nouveau nom. Vous utilisez ensuite les définitions des tables de l'ancienne base de données pour recréer les tables de la nouvelle base de données. Pour ce faire, vous pouvez utiliser le AWS CLI ou le AWS Glue SDK. Pour les étapes, consultez Utilisation de l'AWS CLI pour recréer une base de données AWS Glue et ses tables.

Utiliser des AWS Glue crawlers

AWS Glue les robots d'exploration aident à découvrir le schéma des ensembles de données et à les enregistrer sous forme de tables dans le catalogue de AWS Glue données. Les Crawlers explorent vos données et en déterminent le schéma. De plus, le Crawler peut détecter et enregistrer des partitions. Pour plus d'informations, consultez Définition des Crawlers dans le Guide du développeurAWS Glue . Les tables de données dont l'analyse a abouti peuvent être interrogées à partir d'Athena.

Note

Athena ne reconnaît pas les modèles d'exclusion que vous spécifiez pour un AWS Glue robot d'exploration. Par exemple, si vous disposez d'un compartiment Simple Storage Service (Amazon S3) contenant à la fois des fichiers .csv et .json et que vous excluez les fichiers .json du Crawler, Athena interroge les deux groupes de fichiers. Pour éviter cela, placez les fichiers que vous voulez exclure dans un autre emplacement.

Planification d'un Crawler pour préserver la synchronisation entre le AWS Glue Data Catalog et Simple Storage Service (Amazon S3)

AWS Glue les robots d'exploration peuvent être configurés pour fonctionner selon un calendrier ou à la demande. Pour en savoir plus, consultez Planifications temporelles pour les tâches et les Crawlers dans le Guide du développeurAWS Glue .

Si des données arrivent pour une table partitionnée à une heure fixe, vous pouvez configurer un AWS Glue robot d'exploration pour qu'il s'exécute selon le calendrier prévu afin de détecter et de mettre à jour les partitions de table. Cela peut éliminer la nécessité d'exécuter une commande MSCK REPAIR potentiellement longue et coûteuse ou d'exécuter manuellement une commande ALTER TABLE ADD PARTITION. Pour en savoir plus, consultez Partitions de table dans le Guide du développeurAWS Glue .

Utilisation de plusieurs sources de données avec les Crawlers

Lorsqu'un AWS Glue robot d'exploration analyse Amazon S3 et détecte plusieurs répertoires, il utilise une heuristique pour déterminer où se trouve la racine d'une table dans la structure du répertoire et quels répertoires sont des partitions de la table. Dans certains cas, si le schéma détecté dans deux ou plusieurs répertoires est similaire, le Crawler peut les traiter comme des partitions et pas comme des tables distinctes. L'une des solutions pour aider le Crawler à découvrir les tables individuelles consiste à ajouter le répertoire racine de chaque table comme magasin de données du analyseur.

Les partitions suivantes dans Simple Storage Service (Amazon S3) constituent un example :

s3://bucket01/folder1/table1/partition1/file.txt s3://bucket01/folder1/table1/partition2/file.txt s3://bucket01/folder1/table1/partition3/file.txt s3://bucket01/folder1/table2/partition4/file.txt s3://bucket01/folder1/table2/partition5/file.txt

Si le schéma pour table1 et table2 est similaire, et si une seule source de données est définie sur s3://bucket01/folder1/ in AWS Glue, le robot d'exploration peut créer une table unique avec deux colonnes de partition : une colonne de partition contenant table1 ettable2, et une seconde colonne de partition contenant partition1 des partition5

Pour que le AWS Glue robot crée deux tables distinctes, configurez le robot de manière à ce qu'il dispose de deux sources de donnéess3://bucket01/folder1/table2, s3://bucket01/folder1/table1/ et comme indiqué dans la procédure suivante.

Pour ajouter un magasin de données S3 à un robot d'exploration existant dans AWS Glue

  1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/glue/.

  2. Dans le panneau de navigation, sélectionnez Crawlers. (Analyseurs)

  3. Choisissez le lien vers votre crawler, puis choisissez Modification.

  4. Étape 2 : Choisir des sources de données et des classificateurs, choisissez Modification.

  5. Dans la section Sources de données, choisissez Ajouter une source de données.

  6. Dans la boite de dialogue Ajouter une source de données pour le Chemin S3, choisissez Parcourir.

  7. Choisissez le compartiment que vous souhaitez utiliser, ensuite choisissez Sélectionner un plan.

    La source de données que vous avez ajoutée apparaît dans la liste Sources de données.

  8. Choisissez Suivant.

  9. Sur la page Configurer les paramètres de sécurité, ou créez ou choisissez un rôle IAM pour le crawler, puis sélectionnez Suivant.

  10. Assurez-vous que le chemin S3 se termine par une barre oblique, avant de choisir ensuite Ajouter une source de données S3.

  11. Sur la page Régler la sortie et la planification, pour la Configuration de sortie, sélectionnez la base de données cible.

  12. Choisissez Suivant.

  13. Sur la page Vérifier et mettre à jour, passez en revue les choix que vous avez effectués. Pour modifier une étape, sélectionnez Modification.

  14. Choisissez Mettre à jour.

Synchronisation du schéma de la partition pour éviter « HIVE_PARTITION_SCHEMA_MISMATCH »

Pour chaque table du catalogue de AWS Glue données comportant des colonnes de partition, le schéma est stocké au niveau de la table et pour chaque partition individuelle de la table. Le schéma des partitions est renseigné par un AWS Glue robot d'exploration en fonction de l'échantillon de données qu'il lit dans la partition. Pour de plus amples informations, veuillez consulter Utilisation de plusieurs sources de données avec les Crawlers.

Lorsqu'Athena exécute une requête, il valide le schéma de la table et le schéma de toute partition nécessaire à la requête. La validation compare les types de données des colonnes dans l'ordre et s'assure qu'ils correspondent pour les colonnes qui se chevauchent. Ceci empêche les opérations inattendues, telles que l'ajout ou la suppression de colonnes depuis le milieu d'une table. Si Athena détecte que le schéma d'une partition diffère du schéma de la table, Athena risque de ne pas pouvoir traiter la requête et échoue avec HIVE_PARTITION_SCHEMA_MISMATCH.

Il existe deux moyens de corriger ce problème. Tout d'abord, si les données ont été ajoutées accidentellement, vous pouvez supprimer les fichiers de données à l'origine de la différence de schéma, supprimer la partition et exécuter à nouveau le robot d'indexation sur les données. Deuxièmement, vous pouvez supprimer la partition individuelle, puis exécuter MSCK REPAIR dans Athena pour recréer la partition à l'aide du schéma de la table. Cette deuxième option fonctionne uniquement si vous êtes certain que le schéma appliqué continuera de lire les données correctement.

Mise à jour des métadonnées de table

Après un crawl, le AWS Glue robot attribue automatiquement certaines métadonnées aux tables afin de les rendre compatibles avec d'autres technologies externes telles qu'Apache Hive, Presto et Spark. De temps en temps, le Crawler peut attribuer de manière incorrecte les propriétés des métadonnées. Corrigez manuellement les propriétés AWS Glue avant d'interroger la table à l'aide d'Athena. Pour en savoir plus, consultez Affichage et modification des détails de table dans le Guide du développeurAWS Glue .

AWS Glue peut mal affecter les métadonnées lorsqu'un fichier CSV contient des guillemets autour de chaque champ de données, ce qui entraîne une erreur de serializationLib propriété. Pour de plus amples informations, veuillez consulter Données CSV entre guillemets.

Utilisation de fichiers CSV

Les fichiers CSV ont occasionnellement des guillemets autour des valeurs prévues pour chaque colonne, et il peut y avoir des valeurs d'en-tête incluses dans les fichiers CSV qui ne font pas partie des données à analyser. Lorsque vous créez un schéma AWS Glue à partir de ces fichiers, suivez les instructions de cette section.

Données CSV entre guillemets

Vous pouvez avoir un fichier CSV dont les champs de données sont entre guillemets, comme dans l'exemple suivant :

"John","Doe","123-555-1231","John said \"hello\"" "Jane","Doe","123-555-9876","Jane said \"hello\""

Pour exécuter une requête dans Athena sur une table créée à partir d'un fichier CSV contenant des valeurs entre guillemets, vous devez modifier les propriétés de la table AWS Glue pour utiliser l'OpenCSV. SerDe Pour plus d'informations sur SerDe OpenCSV, consultez. OpenCSVSerDe pour le traitement CSV

Pour modifier les propriétés d'un tableau dans la AWS Glue console
  1. Dans le volet de navigation de la AWS Glue console, sélectionnez Tables.

  2. Choisissez le lien de la table que vous souhaitez modifier, puis sélectionnez Action, Modifier la table.

  3. Sur la page Modifier le tableau, procédez au modifications suivantes :

    • Dans la Bibliothèque de sérialisation, saisissez org.apache.hadoop.hive.serde2.OpenCSVSerde.

    • Pour Serde parameters (Paramètres Serde), saisissez les valeurs suivantes pour les clés escapeChar, quoteChar et separatorChar :

      • Pour escapeChar, saisissez une barre oblique inverse (\).

      • Pour quoteChar, saisissez un guillemet double (").

      • Pour separatorChar, saisissez une virgule (,).

  4. Choisissez Enregistrer.

Pour en savoir plus, consultez Affichage et modification des détails de table dans le Guide du développeurAWS Glue .

Mettre à jour les propriétés d'une AWS Glue table par programmation

Vous pouvez utiliser l'opération AWS Glue UpdateTableAPI ou la commande update-table CLI pour modifier le SerDeInfo bloc dans la définition de la table, comme dans l'exemple JSON suivant.

"SerDeInfo": { "name": "", "serializationLib": "org.apache.hadoop.hive.serde2.OpenCSVSerde", "parameters": { "separatorChar": "," "quoteChar": "\"" "escapeChar": "\\" } },

Fichiers CSV avec en-têtes

Lorsque vous définissez une table dans Athena avec une instruction CREATE TABLE, vous pouvez utiliser la propriété de table skip.header.line.count pour ignorer les en-têtes dans vos données CSV, comme dans l'exemple suivant.

... STORED AS TEXTFILE LOCATION 's3://my_bucket/csvdata_folder/'; TBLPROPERTIES ("skip.header.line.count"="1")

Vous pouvez également supprimer les en-têtes CSV au préalable afin que les informations d'en-tête ne soient pas incluses dans les résultats des requêtes Athena. L'un des moyens d'y parvenir consiste à utiliser AWS Glue des tâches qui exécutent des tâches d'extraction, de transformation et de chargement (ETL). Vous pouvez écrire des scripts en AWS Glue utilisant un langage qui est une extension du dialecte PySpark Python. Pour plus d'informations, consultez la section Création de tâches dans AWS Glue dans le manuel duAWS Glue développeur.

L'exemple suivant montre une fonction dans un AWS Glue script qui écrit un cadre dynamique en utilisant l'from_optionsoption de writeHeader format et lui attribuant la valeur false, ce qui supprime les informations d'en-tête :

glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": "s3://MYBUCKET/MYTABLEDATA/"}, format = "csv", format_options = {"writeHeader": False}, transformation_ctx = "datasink2")

AWS Glue indexation et filtrage des partitions

Lors de l'interrogation de tables partitionnées, Athena récupère et filtre les partitions de table disponibles vers le sous-ensemble correspondant à votre requête. À mesure que de nouvelles données et partitions sont ajoutées, il faut plus de temps pour traiter les partitions et l'exécution des requêtes peut augmenter. Si vous disposez d'une table avec un grand nombre de partitions qui croît au fil du temps, envisagez d'utiliser indexation et filtrage des partitions AWS Glue . L'indexation des partitions permet à Athena d'optimiser le traitement des partitions et d'améliorer les performances des requêtes sur les tables fortement partitionnées. La configuration du filtrage de partition dans les propriétés d'une table s'effectue en deux étapes :

  1. Création d'un index de partition dans AWS Glue.

  2. Activation du filtrage des partitions pour la table.

Création d'un index de partition

Pour connaître les étapes de création d'un index de partition dans AWS Glue, consultez la section Utilisation des index de partition dans le Guide du AWS Glue développeur. Pour connaître les limites relatives aux index de partition dans AWS Glue, consultez la section À propos des index de partition de cette page.

Activation du filtrage de partition

Pour activer le filtrage des partitions pour la table, vous devez définir une nouvelle propriété de table dans AWS Glue. Pour savoir comment définir les propriétés d'une table dans AWS Glue, reportez-vous à la page Configuration de la projection par partition. Lorsque vous modifiez les détails de la table dans AWS Glue, ajoutez la paire clé-valeur suivante à la section Propriétés de la table :

  • Pour Key (Clé), ajoutez partition_filtering.enabled

  • Pour Value (Valeur), ajoutez true

Vous pouvez désactiver le filtrage de partition sur cette table à tout moment en définissant la valeur partition_filtering.enabled sur false.

Une fois que vous avez terminé les étapes ci-dessus, vous pouvez revenir à la console Athena pour interroger les données.

Pour plus d'informations sur l'utilisation de l'indexation et du filtrage des partitions, consultez la section Améliorer les performances des requêtes Amazon Athena à AWS Glue Data Catalog l'aide d'index de partition sur AWS le blog Big Data.

Utilisation de données géospatiales

AWS Glue ne prend pas en charge nativement le texte connu (WKT), le binaire connu (WKB) ou les autres types de données PostGIS. Le AWS Glue classificateur analyse les données géospatiales et les classe à l'aide des types de données pris en charge pour le format, par exemple pour CSV. varchar Comme pour les autres AWS Glue tables, vous devrez peut-être mettre à jour les propriétés des tables créées à partir de données géospatiales pour permettre à Athena d'analyser ces types de données tels quels. Pour plus d’informations, consultez Utiliser des AWS Glue crawlers et Utilisation de fichiers CSV. Athena ne sera peut-être pas en mesure d'analyser certains types de données géospatiales dans les tables telles quelles. AWS Glue Pour de plus amples informations sur l'utilisation des données géospatiales dans Athena, veuillez consulter Interrogation de données géospatiales.

Utiliser des AWS Glue jobs pour l'ETL avec Athena

AWS Glue les jobs exécutent des opérations ETL. Une AWS Glue tâche exécute un script qui extrait les données des sources, les transforme et les charge dans des cibles. Pour plus d'informations, consultez la section Création de tâches dans AWS Glue dans le manuel duAWS Glue développeur.

Création de tables à l'aide d'Athena pour les tâches ETL AWS Glue

Les tables que vous créez dans Athena doivent se voir ajouter une propriété de table appelée classification, qui identifie le format des données. Cela permet d' AWS Glue utiliser les tables pour les tâches ETL. Les valeurs de classification peuvent être avro, csv, json, orc, parquet, ou xml. Voici un exemple d'instruction CREATE TABLE dans Athena :

CREATE EXTERNAL TABLE sampleTable ( column1 INT, column2 INT ) STORED AS PARQUET TBLPROPERTIES ( 'classification'='parquet')

Si la propriété de table n'a pas été ajoutée lors de la création de la table, vous pouvez l'ajouter à l'aide de la AWS Glue console.

Pour ajouter la propriété de la table de classification à l'aide de la AWS Glue console

  1. Connectez-vous à la AWS Glue console AWS Management Console et ouvrez-la à l'adresse https://console.aws.amazon.com/glue/.

  2. Dans le panneau de navigation de la console, choisissez Tableaux.

  3. Choisissez le lien de la table que vous souhaitez modifier, puis sélectionnez Action, Modifier la table.

  4. Faites défiler vers le bas jusqu'à la section des Propriétés du tableau.

  5. Choisissez Ajouter.

  6. Pour Key (Clé), saisissez classification.

  7. Pour la Valeur, entrez un type de données (json par exemple).

  8. Choisissez Enregistrer.

    Dans la section Détails de la table, le type de données que vous avez saisi apparaîssent dans le champ Classification du tableau.

Pour en savoir plus, consultez Utilisation des tables dans le Guide du développeurAWS Glue .

Utilisation des tâches ETL pour optimiser les performances des requêtes

AWS Glue les jobs peuvent vous aider à transformer les données dans un format qui optimise les performances des requêtes dans Athena. Les formats de données ont un grand impact sur les performances et les coûts d'interrogation dans Athena.

Nous recommandons d'utiliser les formats de données Parquet et ORC. AWS Glue prend en charge l'écriture dans ces deux formats de données, ce qui peut vous permettre de transformer plus facilement et plus rapidement les données dans un format optimal pour Athena. Pour plus d'informations sur ces formats et sur d'autres moyens d'améliorer les performances, consultez les 10 meilleurs conseils d'optimisation des performances pour Amazon Athena.

Conversion des types de données SMALLINT et TINYINT en INT lors de la conversion en ORC

Pour réduire le risque qu'Athena ne soit pas en mesure de lire les types de TINYINT données SMALLINT et de données produits par une tâche AWS Glue ETL, SMALLINT TINYINT convertissez-les INT en utilisant l'assistant ou en écrivant un script pour une tâche ETL.

Automatiser les AWS Glue tâches pour l'ETL

Vous pouvez configurer les tâches AWS Glue ETL pour qu'elles s'exécutent automatiquement en fonction de déclencheurs. Cette fonctionnalité est idéale lorsque des données provenant de l'extérieur AWS sont transférées vers un compartiment Amazon S3 dans un format sous-optimal pour les requêtes dans Athena. Pour plus d'informations, consultez la rubrique Déclenchement des tâches AWS Glue dans le Guide du développeurAWS Glue .