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.
MSCK REPAIR TABLE
Utilisez la commande MSCK REPAIR TABLE
pour mettre à jour les métadonnées dans le catalogue après avoir ajouté des partitions compatibles Hive.
La commande MSCK REPAIR TABLE
analyse un système de fichiers tel que Simple Storage Service (Amazon S3) à la recherche de partitions compatibles avec Hive qui ont été ajoutées au système de fichiers après la création de la table. MSCK REPAIR TABLE
compare les partitions dans les métadonnées de la table et les partitions dans S3. Si de nouvelles partitions sont présentes dans l'emplacement S3 que vous avez spécifié lors de la création de la table, elle ajoute ces partitions aux métadonnées et à la table Athena.
Lorsque vous ajoutez des partitions physiques, les métadonnées du catalogue deviennent incompatibles avec la disposition des données dans le système de fichiers et des informations sur les nouvelles partitions doivent être ajoutées au catalogue. Pour mettre à jour les métadonnées, exécutez MSCK REPAIR TABLE
afin de pouvoir interroger les données des nouvelles partitions à partir d'Athena.
Note
La commande MSCK REPAIR TABLE
ajoute uniquement des partitions aux métadonnées ; elle ne les supprime pas. Pour supprimer des partitions des métadonnées après la suppression manuelle des partitions dans Simple Storage Service (Amazon S3), exécutez la commande ALTER TABLE
. Pour plus d'informations, voir ALTER TABLE DROP
PARTITION. table-name
DROP
PARTITION
Considérations et restrictions
Gardez les points suivants à l'esprit lorsque vous utilisez MSCK REPAIR TABLE
:
-
Il est possible que l'ajout de toutes les partitions prenne un certain temps. Si cette opération expire, elle se retrouve dans un état incomplet où seules quelques partitions sont ajoutées au catalogue. Vous devez exécuter
MSCK REPAIR TABLE
sur la même table jusqu'à ce que toutes les partitions aient été ajoutées. Pour de plus amples informations, veuillez consulter Partitionner vos données. -
Pour les partitions qui ne sont pas compatibles avec Hive, utilisez ALTER TABLE ADD PARTITION pour charger les partitions de manière à pouvoir interroger leurs données.
-
Les emplacements de partition à utiliser avec Athena doivent utiliser le protocole
s3
(par exemple,s3://amzn-s3-demo-bucket/
). Dans Athena, les emplacements qui utilisent d'autres protocoles (par exemple,folder
/s3a://
) provoquent des échecs de requête lorsque les requêtesbucket
/folder
/MSCK REPAIR TABLE
sont exécutées sur les tables contenant les données. -
Étant donné que
MSCK REPAIR TABLE
analyse à la fois un dossier et ses sous-dossiers pour trouver un schéma de partition correspondant, veillez à conserver les données des différentes tables dans des hiérarchies de dossiers distinctes. Supposons, par exemple, que vous ayez des données pour le tableau 1 danss3://amzn-s3-demo-bucket1
et des données pour le tableau 2 danss3://amzn-s3-demo-bucket1/table-2-data
. Si les deux tables sont partitionnées par chaîne,MSCK REPAIR TABLE
ajoutera les partitions de la table 2 à la table 1. Pour éviter cela, utilisez des structures de dossiers distinctes telles ques3://amzn-s3-demo-bucket1
et à las3://amzn-s3-demo-bucket2
place. Notez que ce comportement est compatible avec Amazon EMR et Apache Hive. -
En raison d'un problème connu,
MSCK REPAIR TABLE
échoue silencieusement lorsque les valeurs de partition contiennent un caractère deux-points (:
) (par exemple, lorsque la valeur de partition est un horodatage). Comme solution de contournement, utilisez ALTER TABLE ADD PARTITION. -
MSCK REPAIR TABLE
n'ajoute pas de noms de colonnes de partition commençant par un trait de soulignement (_). Pour contourner cette limite, utilisez ALTER TABLE ADD PARTITION.
Résumé
MSCK REPAIR TABLE table_name
Exemples
MSCK REPAIR TABLE orders;
Résolution des problèmes
Après avoir exécutéMSCK REPAIR TABLE
, si Athena n'ajoute pas les partitions au tableau dans le AWS Glue Data Catalog, vérifiez les points suivants :
-
AWS Glue accès — Assurez-vous que le rôle AWS Identity and Access Management (IAM) dispose d'une politique autorisant l'
glue:BatchCreatePartition
action. Pour plus d'informations, consultez Autoriser la colle : BatchCreatePartition dans la IAM politique dans la suite de ce document. -
Accès Amazon S3 : assurez-vous que le rôle dispose d'une politique avec des autorisations suffisantes pour accéder à Amazon S3, y compris l'action
s3:DescribeJob
. Pour un exemple des actions Simple Storage Service (Amazon S3) à autoriser, voir l'exemple de politique de compartiment dans Configurer l'accès entre comptes dans Athena aux compartiments Amazon S3. -
Casses des clés d'objet Amazon S3 : assurez-vous que le chemin Amazon S3 est en minuscules et non en casse mixte (par exemple,
userid
au lieu deuserId
), ou utilisezALTER TABLE ADD PARTITION
pour spécifier les noms des clés d'objet. Pour plus d'informations, consultez Modifier ou redéfinir le chemin Amazon S3 dans la suite de ce document. -
Délais d'expiration des requêtes – La commande
MSCK REPAIR TABLE
est mieux utilisée lors de la création d'une table pour la première fois ou lorsqu'il existe une incertitude quant à la parité entre les données et les métadonnées de partition. Si vous utilisezMSCK REPAIR TABLE
pour ajouter de nouvelles partitions fréquemment (par exemple, sur une base quotidienne) et que vous rencontrez des délais d'expiration des requêtes, envisagez d'utiliser ALTER TABLE ADD PARTITION. -
Partitions manquantes dans le système de fichiers : si vous supprimez manuellement une partition dans Amazon S3, puis exécutez
MSCK REPAIR TABLE
, il est possible que vous receviez le message d'erreurPartitions manquantes dans le système de fichiers
. Cela se produit parce que la commandeMSCK REPAIR TABLE
ne supprime pas les partitions périmées des métadonnées de la table. Pour supprimer les partitions supprimées des métadonnées de la table, exécutez ALTER TABLE DROP PARTITION à la place. Notez que de SHOWPARTITIONSmême, seules les partitions des métadonnées sont répertoriées, et non les partitions du système de fichiers. -
Erreur « NullPointerException le nom est nul »
Si vous utilisez l' AWS Glue CreateTableAPIopération ou le AWS CloudFormation
AWS::Glue::Table
modèle pour créer une table à utiliser dans Athena sans spécifier laTableType
propriété, puis si vous exécutez une DDL requête du typeSHOW CREATE TABLE
ouMSCK REPAIR TABLE
, vous pouvez recevoir le message d'erreur suivantFAILED: Le NullPointerException nom est nul
.Pour résoudre l'erreur, spécifiez une valeur pour l'TableInput
TableType
attribut dans le cadre de l' AWS GlueCreateTable
APIappel ou du AWS CloudFormation modèle. Parmi les valeurs possibles pourTableType
figurentEXTERNAL_TABLE
ouVIRTUAL_VIEW
.Cette exigence s'applique uniquement lorsque vous créez une table à l'aide de l' AWS Glue
CreateTable
APIopération ou duAWS::Glue::Table
modèle. Si vous créez une table pour Athena à l'aide d'une DDL instruction ou d'un AWS Glue robot de recherche, laTableType
propriété est définie automatiquement pour vous.
Les sections suivantes fournissent quelques détails supplémentaires.
Autoriser la colle : BatchCreatePartition dans la IAM politique
Passez en revue les IAM politiques associées au rôle que vous utilisez pour exécuterMSCK
REPAIR TABLE
. Lorsque vous utilisez le AWS Glue Data Catalog avec Athena, la IAM politique doit autoriser l'glue:BatchCreatePartition
action. Pour un exemple de IAM politique autorisant l'glue:BatchCreatePartition
action, voirAWS politique gérée : AmazonAthenaFullAccess.
Modifier ou redéfinir le chemin Amazon S3
Si une ou plusieurs clés d'objet du chemin Amazon S3 sont en casse mixte plutôt qu'en minuscules, MSCK REPAIR TABLE
peut ne pas ajouter les partitions au AWS Glue Data Catalog. Par exemple, si votre chemin Amazon S3 inclut le nom de la clé de l'objet userId
, les partitions suivantes peuvent ne pas être ajoutées au AWS Glue Data Catalog :
s3://amzn-s3-demo-bucket/path/userId=1/ s3://amzn-s3-demo-bucket/path/userId=2/ s3://amzn-s3-demo-bucket/path/userId=3/
Pour résoudre ce problème, procédez de l'une des manières suivantes :
-
Utilisez des minuscules au lieu d'une casse mixte lorsque vous créez vos clés d'objet Amazon S3 :
s3://amzn-s3-demo-bucket/path/userid=1/ s3://amzn-s3-demo-bucket/path/userid=2/ s3://amzn-s3-demo-bucket/path/userid=3/
-
Utilisez ALTER TABLE ADD PARTITION pour redéfinir l'emplacement, comme dans l'exemple suivant :
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (userId=1) LOCATION 's3://amzn-s3-demo-bucket/path/userId=1/' PARTITION (userId=2) LOCATION 's3://amzn-s3-demo-bucket/path/userId=2/' PARTITION (userId=3) LOCATION 's3://amzn-s3-demo-bucket/path/userId=3/'
Notez que même si les noms de clé d'objet Amazon S3 peuvent être utilisés en majuscules, les noms de compartiment Amazon S3 eux-mêmes doivent toujours être en minuscules. Pour plus d'informations, consultez Directives de dénomination des clés d'objet et Règles de dénomination des compartiments dans le Guide de l'utilisateur Amazon S3.