MSCK REPAIR TABLE - 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.

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 table-name DROP PARTITION. Pour plus d'informations, voir ALTER TABLE 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/folder/). Dans Athena, les emplacements qui utilisent d'autres protocoles (par exemple, s3a://bucket/folder/) provoquent des échecs de requête lorsque les requêtes 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 dans s3://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 que s3://amzn-s3-demo-bucket1 et à la s3://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:BatchCreatePartitionaction. 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 de userId), ou utilisez ALTER 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 utilisez MSCK 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'erreur Partitions manquantes dans le système de fichiers. Cela se produit parce que la commande MSCK 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::Tablemodèle pour créer une table à utiliser dans Athena sans spécifier la TableType propriété, puis si vous exécutez une DDL requête du type SHOW CREATE TABLE ouMSCK REPAIR TABLE, vous pouvez recevoir le message d'erreur suivant FAILED: Le NullPointerException nom est nul.

    Pour résoudre l'erreur, spécifiez une valeur pour l'TableInputTableTypeattribut dans le cadre de l' AWS Glue CreateTableAPIappel ou du AWS CloudFormation modèle. Parmi les valeurs possibles pour TableType figurent EXTERNAL_TABLE ou VIRTUAL_VIEW.

    Cette exigence s'applique uniquement lorsque vous créez une table à l'aide de l' AWS Glue CreateTableAPIopération ou du AWS::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, la TableType 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:BatchCreatePartitionaction. Pour un exemple de IAM politique autorisant l'glue:BatchCreatePartitionaction, 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.