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

Lecture de 4 minute(s)
0

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

Brève description

Découvrez les types d'erreurs « HIVE_METASTORE_ERROR » suivants et leurs causes :

  • **HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : Erreur : attendue à la position 1234 de la structure<test \ _column> mais «/» est trouvé. (Service : nul ; Code d'état : 0 ; Code d'erreur : null ; ID de demande : null) :**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.
  • HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : Le descripteur de stockage de table requis n'est pas renseigné :
    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.
  • **HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : java.ioException : La taille de la charge utile de réponse (11112222 octets) a dépassé la taille de charge utile maximale autorisée (6291556 octets) :**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.

Résolution

HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : Erreur : attendue à la position 1234 de la structure<test \ _column> mais «/» est trouvé. (Service : nul ; Code d'état : 0 ; Code d'erreur : nul ; ID de demande : nul)

Pour résoudre cette erreur, procédez comme suit :

  • Pour remplacer le caractère spécial du nom de colonne par un trait de soulignement, exécutez le script personnalisé suivant sur vos données :
import re
string = open('a.txt').read()
new_str = re.sub('/', '_', string)
open('b.txt', 'w').write(new_str)

HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : Le descripteur de stockage de la table requis n'est pas renseigné.

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 : La taille de la charge utile de réponse (11112222 octets) a dépassé la taille de charge utile maximale autorisée (6291556 octets)

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 génération d'une URL présignée pour votre objet, consultez la section Partage d'objets à l'aide 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é.

Informations connexes

Résolution des problèmes dans Athena

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