Comment puis-je résoudre l'erreur « HIVE_METASTORE_ERROR » lorsque j'interroge une table dans Amazon Athena ?

Lecture de 5 minute(s)
0

Le message d'erreur « HIVE_METASTORE_ERROR » s'affiche lorsque j'interroge ma table Amazon Athena.

Résolution

Consultez les types d’erreurs « HIVE_METASTORE_ERROR » suivants pour en connaître la cause et la résolution.

Remarque : si des erreurs surviennent lorsque vous exécutez des commandes par le biais de l’interface de la ligne de commande AWS (AWS CLI), consultez Corriger les erreurs liées à AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : Erreur : expected at the position 1234 of struct<test_column> but '/' is found. (Service: null; Status Code: 0; Error Code: null; Request ID: null)"

-ou-

"HIVE_METASTORE_ERROR: com.amazonaws.services.datacatalog.model.InvalidInputException: Erreur : expected at the position 11884 of ... but '#' is found" »

Un nom de colonne dans la table interrogée inclut un caractère spécial, ou un nom de colonne dans le schéma de partition inclut un caractère spécial. Athena ne prend pas en charge les caractères spéciaux autres que le trait de soulignement. Pour plus d'informations, consultez la section Noms des tables, des bases de données et des colonnes.

Pour corriger cette erreur, vous devez remplacer le caractère spécial du nom de colonne par un trait de soulignement. Modifiez ensuite le schéma existant de la table.

L’exemple de tableau AWS Glue suivant contient un fichier de données nommé « a.txt » avec le caractère spécial « / » :

col/1,col_2,col/3
data1,data2,data3
data4,data5,data6
  1. Pour remplacer le caractère spécial « / » par un trait de soulignement « _ », exécutez le script suivant :

    string = open('a.txt').readlines()
    string[0] = string[0].replace('/', '_')
    open('b.txt', 'w').write(string)

    Exemple de sortie avec un nouveau fichier de données « b.txt » :

    col_1,col_2,col_3
    data1,data2,data3
    data4,data5,data6
  2. Modifiez le schéma existant de la table depuis la console AWS Glue, puis remplacez « / » par tout autre caractère pris en charge par Athena.

HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : Required Table Storage Descriptor is not populated »

-ou-

« HIVE_METASTORE_ERROR: Table is missing storage descriptor »

Le paramètre StorageDescriptor contient des informations sur le stockage physique de la table. Cette erreur s’affiche si l’emplacement d'une ou de plusieurs partitions de la table ne sont pas définie en raison de partitions corrompues.

Pour résoudre cette erreur, choisissez une ou plusieurs des solutions suivantes :

  • Si votre table est déjà partitionnée et que les données sont chargées au format de partition Hive d'Amazon Simple Storage Service (Amazon S3), chargez les partitions. Exécutez une commande similaire à l'exemple suivant :
    **Remarque :**Veillez à remplacer doc_example_table par le nom de votre table.

    MSCK REPAIR TABLE doc_example_table
  • Si la commande MSCK REPAIR TABLE ne résout pas le problème, supprimez le tableau et créez-en une avec la même définition. Exécutez ensuite la commande MSCK REPAIR TABLE sur la nouvelle table.

  • Créez un dossier distinct dans le compartiment Amazon S3, puis déplacez les fichiers de données que vous souhaitez interroger dans ce dossier. Créez un Crawler AWS Glue qui pointe vers ce dossier et non vers le compartiment.

« HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : java.ioException : Response payload size (11112222 bytes) exceeded maximum allowed payload size (6291556 bytes) »

Vous utilisez une fonction AWS Lambda pour exécuter des requêtes Athena sur un catalogue de données AWS Glue multicomptes ou sur un métastore Hive externe. Toutefois, Lambda a une limite de charge utile d'appel de 6 Mo. Cette erreur s'affiche lorsque la taille de l'objet renvoyé par Lambda est supérieure à 6 Mo. La limite de charge utile Lambda est une limite stricte qui ne peut pas être augmentée. Pour plus d’informations, consultez la section Quotas Lambda.

Pour résoudre cette erreur, choisissez une ou plusieurs des solutions suivantes :

  • Téléversez la charge utile de réponse de la fonction Lambda comme objet dans un compartiment Amazon S3. Incluez ensuite cet objet comme charge utile dans la réponse de la Fonction Lambda. Pour plus d’informations sur la façon de générer une URL présignée pour votre objet, consultez la section Partage d'objets avec des URL présignées.
  • Si votre table est partitionnée, et que votre cas d’utilisation le permet, recherchez uniquement la partition spécifique.
  • Lorsque vous créez la fonction Lambda, spécifiez l'emplacement du déversement dans Amazon S3. Les réponses supérieures au seuil se répandent dans l'emplacement S3 spécifié.

« HIVE_METASTORE_ERROR: Failed to fetch partitions from Glue Data Catalog »

Cette erreur se produit pour l'une des raisons suivantes :

  • Le nom de colonne présent dans les métadonnées de la partition contient des caractères spéciaux autres qu’un trait de soulignement. Pour plus d'informations, consultez la section Noms des tables, des bases de données et des colonnes.
  • Les informations SerDe sont absentes du StorageDescriptor défini dans les métadonnées de la partition.

Pour identifier la partition présentant le problème, effectuez l’une des opérations suivantes :

Pour résoudre le problème de partition, exécutez l’instruction DDL ALTER TABLE DROP PARTITION pour supprimer la partition. Effectuez ensuite l’une des actions suivantes :

Informations connexes

Résolution des problèmes dans Athena

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an