ALTER TABLE ADD PARTITION - Amazon Athena

ALTER TABLE ADD PARTITION

Crée une ou plusieurs colonnes de partition pour la table. Chaque partition se compose d'une ou plusieurs combinaisons nom/valeur de colonne distinctes. Un répertoire de données distinct est créé pour chaque combinaison spécifiée, ce qui peut améliorer les performances des requêtes dans certaines circonstances. Les colonnes partitionnées n'existent pas dans les données de table elles-mêmes. Par conséquent, si vous utilisez un nom de colonne qui porte le même nom qu'une colonne dans la table elle-même, vous obtenez une erreur. Pour de plus amples informations, consultez Partitionner vos données.

Dans Athena, une table et ses partitions doivent utiliser les mêmes formats de données, mais leurs schémas peuvent différer. Pour de plus amples informations, consultez Mises à jour de tables avec des partitions.

Pour plus d'informations sur les autorisations au niveau des ressources requises dans les politiques IAM (notamment glue:CreatePartition), consultez les rubriques Autorisations d'API AWS Glue : référence des actions et ressources et Configuration de l’accès aux bases de données et aux tables dans le AWS Glue Data Catalog. Pour des informations de résolution de problèmes concernant les autorisations lors de l'utilisation d'Athena, consultez la section Autorisations de la rubrique Résolution des problèmes dans Athena.

Résumé

ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (partition_col1_name = partition_col1_value [,partition_col2_name = partition_col2_value] [,...]) [LOCATION 'location1'] [PARTITION (partition_colA_name = partition_colA_value [,partition_colB_name = partition_colB_value [,...])] [LOCATION 'location2'] [,...]

Paramètres

Lorsque vous ajoutez une partition, vous spécifiez une ou plusieurs paires nom/valeur de colonnes pour la partition et le chemin d'accès Simple Storage Service (Amazon S3) où résident les fichiers de données de cette partition.

[IF NOT EXISTS]

Entraîne la suppression de l'erreur si une partition avec la même définition existe déjà.

PARTITION (partition_col_name = partition_col_value [,...])

Crée une partition avec les combinaisons nom/valeur de colonne que vous spécifiez. Placez partition_col_value dans des caractères de chaîne uniquement si le type de données de la colonne est une chaîne.

[LOCATION 'emplacement']

Spécifie le répertoire dans lequel la partition définie par l'instruction précédente doit être stockée. La clause LOCATION est facultative lorsque les données utilisent le partitionnement de style Hive (pk1=v1/pk2=v2/pk3=v3). Grâce au partitionnement de style Hive, l'URI Amazon S3 complet est créé automatiquement à partir de l'emplacement de la table, des noms des clés de partition et des valeurs des clés de partition. Pour de plus amples informations, consultez Partitionner vos données.

Considérations

Amazon Athena n’impose pas de limite spécifique concernant le nombre de partitions que vous pouvez ajouter dans une seule instruction DDL ALTER TABLE ADD PARTITION. Toutefois, si vous devez ajouter un nombre important de partitions, pensez à diviser l’opération en lots plus petits afin d’éviter d’éventuels problèmes de performances. L’exemple suivant utilise des commandes successives pour ajouter des partitions individuellement et utilise IF NOT EXISTS pour éviter d’ajouter des doublons.

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-01') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-02') ALTER TABLE table_name ADD IF NOT EXISTS PARTITION (ds='2023-01-03')

Lorsque vous utilisez des partitions dans Athena, gardez à l’esprit les points suivants :

  • Bien qu'Athena prenne en charge les requêtes sur les tables AWS Glue allant jusqu'à 10 millions de partitions, Athena ne peut pas lire plus d'un million de partitions en une seule analyse.

  • Pour optimiser vos requêtes et réduire le nombre de partitions analysées, pensez à des stratégies telles que l’élagage des partitions ou l’utilisation d’index de partition.

Pour obtenir d’autres éléments à prendre en compte lors de l’utilisation de partitions dans Athena, consultez Partitionner vos données.

Exemples

L'exemple suivant ajoute une partition unique à une table pour les données partitionnées de style Hive.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-14', country = 'IN');

L'exemple suivant ajoute plusieurs partitions à une table pour les données partitionnées de style Hive.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') PARTITION (dt = '2016-06-01', country = 'IN');

Lorsque la table n'est pas destinée à des données partitionnées de style Hive, la clause LOCATION est obligatoire et doit être l'URI Amazon S3 complet pour le préfixe contenant les données de la partition.

ALTER TABLE orders ADD PARTITION (dt = '2016-05-31', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_31_May_2016/' PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://amzn-s3-demo-bucket/path/to/INDIA_01_June_2016/';

Pour ignorer les erreurs lorsque la partition existe déjà, utilisez la clause IF NOT EXISTS comme dans l'exemple suivant.

ALTER TABLE orders ADD IF NOT EXISTS PARTITION (dt = '2016-05-14', country = 'IN');

Fichiers _$folder$ zéro octet

Si vous exécutez une instruction ALTER TABLE ADD PARTITION et spécifiez par erreur une partition déjà existante et un emplacement Simple Storage Service (Amazon S3) incorrect, des fichiers d'emplacement zéro octet du format partition_value_$folder$ sont créés dans Simple Storage Service (Amazon S3). Vous devez supprimer ces fichiers manuellement.

Pour éviter que cela ne se produise, utilisez la syntaxe ADD IF NOT EXISTS de votre instruction ALTER TABLE ADD PARTITION, comme dans l'exemple suivant.

ALTER TABLE table_name ADD IF NOT EXISTS PARTITION […]