ALTER TABLE ADD PARTITION - 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.

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 plus d’informations, consultez Partitionnement de données dans Athena.

Dans Athena, une table et ses partitions doivent utiliser les mêmes formats de données, mais leurs schémas peuvent différer. Pour plus d’informations, consultez Mises à jour dans les 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 Accès détaillé aux bases de données et 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 plus d’informations, consultez Partitionnement de données dans Athena.

Considérations

Amazon Athena n'impose pas de limite spécifique au nombre de partitions que vous pouvez ajouter dans une seule instruction ALTER TABLE ADD PARTITION DDL. 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 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 travaillez avec des partitions dans Athena, gardez également à l'esprit les points suivants :

  • Bien qu'Athena prenne en charge l'interrogation de AWS Glue tables contenant 10 millions de partitions, Athena ne peut pas lire plus d'un million de partitions en un seul scan.

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

  • Si vous n'en utilisez pas AWS Glue Data Catalog, le nombre maximum de partitions par table est de 20 000. Vous pouvez demander une augmentation de quota.

Pour des considérations supplémentaires concernant l'utilisation des partitions dans Athena, voir. Partitionnement de données dans Athena

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://mystorage/path/to/INDIA_31_May_2016/' PARTITION (dt = '2016-06-01', country = 'IN') LOCATION 's3://mystorage/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 […]