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

  • 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://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. Par exemple, supposons que vous avez des données pour la table A dans s3://table-a-data et des données pour la table B dans s3://table-a-data/table-b-data. Si les deux tables sont partitionnées par des chaînes, MSCK REPAIR TABLE ajoutera des partitions de la table B à la table A. Pour éviter cela, utilisez plutôt des structures de dossiers séparés comme s3://table-a-data et s3://table-b-data. 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é la commande MSCK REPAIR TABLE, si Athena n'ajoute pas les partitions à la table dans le AWS Glue Data Catalog, vérifiez ce qui suit :

  • Accès AWS Glue : assurez-vous que le rôle AWS Identity and Access Management (IAM) dispose d'une politique qui autorise l'action glue:BatchCreatePartition. Pour plus d'informations, consultez Autorisation de glue:BatchCreatePartition dans la politique IAM 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 Accès inter-comptes aux compartiments Simple Storage Service (Amazon S3) dans Athena.

  • 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 SHOW PARTITIONS (AFFICHER LES PARTITIONS) répertorie de manière similaire uniquement les partitions dans les métadonnées, pas les partitions dans le système de fichiers.

  • Erreur « NullPointerException name is null » (NullPointerException, nom nul)

    Si vous utilisez l'opération API AWS Glue CreateTable (Créer une table) ou le modèle AWS CloudFormation AWS::Glue::Table pour créer une table à utiliser dans Athena sans spécifier la propriété TableType, puis exécutez une requête DDL comme SHOW CREATE TABLE ou MSCK REPAIR TABLE, il est possible que vous receviez le message d'erreur FAILED: NullPointerException Name is null (ÉCHEC : NullPointerException, nom nul).

    Pour résoudre cette erreur, spécifiez une valeur pour l'attribut TableInput TableType dans le cadre de l'appel d'API AWS Glue CreateTable ou du modèle AWS CloudFormation. Parmi les valeurs possibles pour TableType figurent EXTERNAL_TABLE ou VIRTUAL_VIEW.

    Cette exigence s'applique uniquement lorsque vous créez un tableau à l'aide de l'opération API AWS Glue CreateTable ou du modèle AWS::Glue::Table. Si vous créez une table pour Athena en utilisant à l'aide d'une instruction DDL ou d'un Crawler AWS Glue, la propriété TableType est définie pour vous automatiquement.

Les sections suivantes fournissent quelques détails supplémentaires.

Autorisation de glue:BatchCreatePartition dans la politique IAM

Vérifiez les politiques IAM associées au rôle que vous utilisez pour exécuter MSCK REPAIR TABLE. Lorsque vous utilisez le AWS Glue Data Catalog avec Athena, la politique IAM doit autoriser l'action glue:BatchCreatePartition. Pour un exemple de politique IAM qui autorise l'action glue:BatchCreatePartition, voir Politique gérée par AWS : 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://DOC-EXAMPLE-BUCKET/path/userId=1/ s3://DOC-EXAMPLE-BUCKET/path/userId=2/ s3://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/path/userid=1/ s3://DOC-EXAMPLE-BUCKET/path/userid=2/ s3://DOC-EXAMPLE-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://DOC-EXAMPLE-BUCKET/path/userId=1/' PARTITION (userId=2) LOCATION 's3://DOC-EXAMPLE-BUCKET/path/userId=2/' PARTITION (userId=3) LOCATION 's3://DOC-EXAMPLE-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.