Comment créer et utiliser des tables partitionnées dans Amazon Athena ?

Dernière mise à jour : 23/04/2021

Je veux créer des tables partitionnées dans Amazon Athena et les utiliser pour améliorer mes requêtes.

Brève description

En partitionnant vos tables Athena, vous pouvez restreindre la quantité de données analysées par chaque requête, ce qui améliore les performances et réduit les coûts. Le partitionnement divise votre table et conserve les données associées en fonction des valeurs de colonne. Les partitions agissent comme des colonnes virtuelles et aident à réduire la quantité de données analysées par requête.

Tenez compte des éléments suivants lorsque vous créez une table et partitionnez les données :

  • Vous devez stocker vos données dans des compartiments Amazon Simple Storage Service (Amazon S3) en tant que partition.
  • Incluez les colonnes de partitionnement et l'emplacement racine des données partitionnées lorsque vous créez la table.
  • Choisissez l'approche appropriée pour charger les partitions dans le catalogue de données AWS Glue. Le tableau se base sur le catalogue de données lorsque vous exécutez vos requêtes.
  • Utilisez la projection de partitions pour les données hautement partitionnées dans Amazon S3.

Solution

Voici quelques éléments à garder à l'esprit lorsque vous créez une table avec des partitions.

Stockage sur Amazon S3

Les données doivent être partitionnées et stockées sur Amazon S3. Les données partitionnées peuvent être dans l'un des formats suivants :

  • Hive (exemple : s3://doc-example-bucket/example-folder/year=2021/month=01/day=01/myfile.csv)
    Remarque : le chemin inclut les noms des clés de partition et leurs valeurs (exemple : annee=2021)
  • Autres que Hive (exemple : s3://doc-example-bucket/example-folder/2021/01/01/myfile.csv)

Incluez des informations de partitionnement lors de la création de la table

L'instruction CREATE TABLE doit inclure les détails de partitionnement. Utilisez PARTITIONED BY pour définir les colonnes de partition et LOCATION pour spécifier l'emplacement racine des données partitionnées. Exécutez une requête similaire à la suivante :

CREATE EXTERNAL TABLE doc-example-table (
first string,
last string,
username string
)
PARTITIONED BY (year string, month string, day string)
STORED AS parquet
LOCATION 's3://doc-example-bucket/example-folder'

Remplacez ce qui suit dans la requête :

  • doc-example-table par le nom de la table que vous créez
  • doc-example-bucket par le nom du compartiment S3 où vous stockez votre table
  • example-folder par le nom de votre dossier S3
  • first, last, et username par les noms des colonnes
  • year, monthet date par les noms des colonnes de partition

Chargez les partitions dans le catalogue de données avec une approche adaptée à votre cas d'utilisation

Après avoir créé la table, ajoutez les partitions au catalogue de données. Vous pouvez utiliser l'une des approches suivantes :

  • Utilisez la requête MSCK REPAIR TABLE pour les données Hive : la commande MSCK REPAIR TABLE analyse un système de fichiers, tel qu'Amazon S3, à la recherche de partitions compatibles avec Hive. La commande les compare aux partitions déjà présentes dans la table, puis ajoute les nouvelles partitions au catalogue de données. Exécutez une commande similaire à la suivante :
    Remarque : cette approche n'est pas recommandée si vous avez plus de quelques milliers de partitions. Vos requêtes DDL peuvent rencontrer des problèmes d’expiration. Pour plus d’informations, consultez MSCK REPAIR TABLE détecte des partitions dans Athena, mais ne les ajoute pas au catalogue de données AWS Glue
MSCK REPAIR TABLE doc-example-table
  • Utilisez la requête ALTER TABLE ADD PARTITION pour les données Hive et autres que Hive : la commande ALTER TABLE ADD PARTITION ajoute une ou plusieurs partitions au catalogue de données. Dans la commande, spécifiez les paires nom/valeur de la colonne de partition ainsi que le chemin Amazon S3 où les fichiers de données de cette partition sont stockés. Vous pouvez ajouter une partition ou un lot de partitions par requête en exécutant des commandes similaires aux suivantes :
ALTER TABLE doc-example-table ADD PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
ALTER TABLE doc-example-table ADD
PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
PARTITION (year='2020', month='06', day='01') LOCATION 's3://doc-example-bucket/example-folder/2020/06/01/'
  • Utilisez l'analyseur AWS Glue pour les données Hive et autres que Hive : vous pouvez utiliser l'analyseur Glue pour inférer automatiquement le schéma de table à partir de votre jeu de données, créer la table, puis ajouter les partitions au catalogue de données. Vous pouvez également utiliser l'analyseur pour ajouter uniquement des partitions à une table créée manuellement avec l'instruction CREATE TABLE. Pour utiliser l'analyseur pour ajouter des partitions, spécifiez, lorsque vous définissez l'analyseur, une ou plusieurs tables de catalogue de données existantes comme source de l'analyse au lieu de spécifier des banques de données. L'analyseur analyse les banques de données spécifiées par les tables du catalogue de données. Aucune nouvelle table n'est créée. Au lieu de cela, les tables créées manuellement sont mises à jour et de nouvelles partitions sont ajoutées. Pour plus d'informations, consultez Définition des options de configuration de l'analyseur.
  • Utilisez la projection de partition pour les données hautement partitionnées dans Amazon S3 : lorsque vous disposez de données hautement partitionnées dans Amazon S3, l'ajout de partitions au catalogue de données peut s'avérer difficile et chronophage. Les requêtes sur une table hautement partitionnée ne se terminent pas rapidement. Dans ce cas, vous pouvez utiliser la fonction de projection de partition pour accélérer le traitement des requêtes des tables hautement partitionnées et automatiser la gestion des partitions. Dans une projection de partition, les valeurs et les emplacements de la partition sont calculés à partir de la configuration plutôt que lus à partir d'un référentiel, tel que le catalogue de données. Cela signifie qu'il n'est pas nécessaire d'ajouter des partitions au catalogue de données avec une projection de partition. Étant donné que les opérations en mémoire sont généralement plus rapides que les opérations à distance, la projection de partition peut réduire la durée d'exécution des requêtes sur des tables hautement partitionnées. La fonction de projection de partition fonctionne actuellement avec des valeurs énumérées, des entiers, des dates ou des types de colonnes de partition injectés. Pour plus d'informations, consultez Projection de partition avec Amazon Athena.

Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?