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

Date de la dernière mise à jour : 11/05/2021

Je reçois l'erreur « HIVE_METASTORE_ERROR » lorsque j'interroge ma table Amazon Athena.

Brève description

Les différents types d'erreurs « HIVE_METASTORE_ERROR » et leurs causes sont les suivants :

  • « HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct but '/' is found » (HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException : Erreur : : attendu à la position 1234 de struct mais '/' est trouvé.) « (Service: null; Status Code: 0; Error Code: null; Request ID: null):  » [(Service : null ; Code de statut : 0 ; Code d'erreur : null ; ID de requête : null) :] Vous obtenez cette erreur si un nom de colonne dans la table interrogée ou dans le schéma de partition comprend 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 Noms des tables, des bases de données et des colonnes.
  • « HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated: » (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. Vous obtenez cette erreur si une ou plusieurs partitions de la table n'ont pas l'emplacement de partition défini en raison de partitions corrompues.
  • HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : java.io.IOException : La taille de la charge utile de la réponse (11112222 octets) a dépassé la taille maximale autorisée de la charge utile (6291556 octets) : Vous obtenez cette erreur lorsque vous utilisez une fonction AWS Lambda pour exécuter des requêtes Athena sur un catalogue de données AWS Glue entre comptes ou un métastore Hive externe. Lambda a une limite de charge utile d'invocation de 6 Mo. Vous obtenez cette erreur lorsque la taille de l'objet renvoyé par Lambda est supérieure à 6 Mo. La limite de charge utile de Lambda est une limite stricte et ne peut pas être augmentée. Pour plus d'informations, consultez Quotas Lambda.

Résolution

« HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct<test_column> but '/' is found. » (HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : attendu à la position 1234 de struct<test_column> mais '/' est trouvé.) (Service : null ; Code de statut : 0 ; Code d'erreur : null ; ID de requête : null)

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

  • Exécutez le script personnalisé suivant sur vos données pour remplacer le caractère spécial du nom de la colonne par un trait de soulignement :
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 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 en exécutant une commande similaire à la suivante :
    Remarque : veillez à remplacer doc_example_table par le nom de votre table.
MSCK REPAIR TABLE doc_example_table
  • Si l'exécution de la commande MSCK REPAIR TABLE ne résout pas le problème, supprimez la table et créez-en une nouvelle avec la même définition. Ensuite, exécutez la commande MSCK REPAIR TABLE sur la nouvelle table.
  • Créez un dossier séparé dans le compartiment Amazon S3, puis déplacez les fichiers de données que vous voulez interroger dans ce dossier. Ensuite, créez un robot AWS Glue pointant vers ce dossier au lieu du compartiment.

HIVE_METASTORE_ERROR : com.facebook.presto.spi.PrestoException : java.io.IOException : La taille de la charge utile de la réponse (11112222 octets) a dépassé la taille maximale autorisée de la charge utile (6291556 octets)

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

  • Chargez la charge utile de la réponse de la fonction Lambda sous forme d'objet dans un compartiment Amazon S3. Ensuite, incluez cet objet en tant que 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 Partage d'un objet avec une URL présignée.
  • Si votre table est partitionnée et que votre cas d'utilisation le permet, interrogez uniquement la partition spécifique.
  • Spécifiez l'emplacement de déversement dans Amazon S3 lorsque vous créez la fonction Lambda. Les réponses qui sont plus grandes que le seuil déversent dans l'emplacement S3 spécifié.

Cet article a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?