Lorsque j’exécute une requête MSCK REPAIR TABLE, Amazon Athena renvoie une liste de partitions. Pourtant, Athena ne parvient pas à ajouter les partitions à la table du catalogue de données AWS Glue.
Brève description
Voici les raisons les plus fréquentes qui empêchent Athena d’ajouter des partitions aux tables du catalogue de données :
- L’utilisateur ou le rôle de gestion des identités et des accès AWS (AWS IAM) ne dispose pas de politique autorisant l’action Glue:BatchCreatePartition.
- Le chemin Amazon Simple Storage Service (Amazon S3) est en casse mixte et non en minuscules.
- Les partitions ne respectent pas le format de style Hive, year=2023/month=01/day=01. Au lieu de cela, les partitions sont au format de style non Hive, /2023/01/01/.
Solution
Autoriser Glue:BatchCreatePartition dans la politique IAM
Vérifiez les politiques IAM associées à l’utilisateur ou au rôle utilisé pour exécuter MSCK REPAIR TABLE. Lorsque vous utilisez le catalogue de données avec Athena, la politique IAM doit autoriser l’action Glue:BatchCreatePartition. Si la politique n’autorise pas cette action, Athena ne peut pas ajouter de partitions au métastore. Pour voir un exemple de politique IAM qui autorise l’action glue:BatchCreatePartition, consultez la politique gérée par AWS : AmazonAthenaFullAccess.
Passez le chemin Amazon S3 en minuscules
Pour que MSCK REPAIR TABLE ajoute les partitions au catalogue de données, le nom du chemin Amazon S3 doit être en minuscules.
Par exemple, si le chemin Amazon S3 est en casse mixte, userId, les partitions suivantes ne sont pas ajoutées au catalogue de données :
- s3://awsdoc-example-bucket/path/userId=1/
- s3://awsdoc-example-bucket/path/userId=2/
- s3://awsdoc-example-bucket/path/userId=3/
Pour résoudre ce problème, utilisez userid en minuscules :
- s3://awsdoc-example-bucket/path/userid=1/
- s3://awsdoc-example-bucket/path/userid=2/
- s3://awsdoc-example-bucket/path/userid=3/
Exécutez la commande ALTER TABLE ADD PARTITION
Exécutez la commande ALTER TABLE ADD PARTITION afin d’ajouter des partitions à la table glue pour les données partitionnées qui sont de style Hive ou non.
La clause LOCATION est nécessaire pour les données partitionnées qui ne sont pas de style Hive. Veillez à inclure le chemin Amazon S3 complet comme préfixe qui contient les données de partition :
ALTER TABLE orders ADD
PARTITION (year = '2023', month = '01', day ='01')
LOCATION 's3://mystorage/path/to/test/'
PARTITION (year = '2023', month = '01', day ='02')
LOCATION 's3://mystorage/path/to/test/';
Informations complémentaires
Partitionnement des données dans Athena
Actions, ressources et clés de condition pour Amazon Athena
Actions, ressources et clés de condition pour Amazon Glue