Come posso risolvere l'errore "HIVE_METASTORE_ERROR" quando eseguo una query su una tabella in Amazon Athena?

4 minuti di lettura
0

Ricevo l'errore "HIVE_METASTORE_ERROR" quando eseguo una query sulla mia tabella Amazon Athena.

Breve descrizione

Scopri i seguenti tipi di errori "HIVE\ _METASTORE\ _ERROR" e le relative cause:

  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Error: : expected at the position 1234 of struct<test_column> but '/' is found. (Service: null; Status Code: 0; Error Code: null; Request ID: null): Un nome di colonna nella tabella interrogata include un carattere speciale oppure un nome di colonna nello schema di partizione include un carattere speciale. Athena non supporta caratteri speciali diversi dal carattere di sottolineatura. Per ulteriori informazioni, consulta Nomi per tabelle, database e colonne.
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated:
    Il parametro StorageDescriptor contiene informazioni sull'archiviazione fisica della tabella. Questo errore viene visualizzato se una o più partizioni sulla tabella non hanno la posizione della partizione impostata a causa di partizioni danneggiate.
  • HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: Response payload size (11112222 bytes) exceeded maximum allowed payload size (6291556 bytes): Utilizzi una funzione AWS Lambda per eseguire query Athena su un Catalogo dati AWS Glue tra più account o su un metastore Hive esterno. Tuttavia, Lambda ha un limite di payload di chiamata di 6 MB. Questo errore viene visualizzato quando la dimensione dell'oggetto restituito da Lambda è superiore a 6 MB. Il limite di carico utile Lambda è un limite fisso e non può essere aumentato. Per ulteriori informazioni, consulta Quote Lambda.

Risoluzione

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

Per risolvere questo errore, completa i seguenti passaggi:

  • Per sostituire il carattere speciale nel nome della colonna con un carattere di sottolineatura, esegui il seguente script personalizzato sui tuoi dati:
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: Required Table Storage Descriptor is not populated

Per risolvere questo problema, scegli una o più delle seguenti soluzioni:

  • Se la tabella è già partizionata e i dati sono caricati nel formato di partizione Hive di Amazon Simple Storage Service (Amazon S3), carica le partizioni. Esegui un comando simile all'esempio seguente:
    Nota: Assicurati di sostituire doc_example_table con il nome della tua tabella.
MSCK REPAIR TABLE doc_example_table
  • Se il comando MSCK REPAIR TABLE non risolve il problema, elimina la tabella e crea una nuova tabella con la stessa definizione. Quindi, esegui il comando MSCK REPAIR TABLE sulla nuova tabella.
  • Crea una cartella separata nel bucket Amazon S3, quindi sposta i file di dati che desideri interrogare in quella cartella. Crea un crawler AWS Glue che punti a quella cartella anziché al bucket.

HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: La dimensione del payload di risposta (11112222 byte) ha superato la dimensione massima consentita del payload (6291556 byte)

Per risolvere questo problema, scegli una o più delle seguenti soluzioni:

  • Carica il payload di risposta della funzione Lambda come oggetto in un bucket Amazon S3. Quindi, includi questo oggetto come payload nella risposta della funzione Lambda. Per informazioni sulla generazione di un URL predefinito per il tuo oggetto, consulta Condivisione di oggetti tramite URL prefirmati.
  • Se la tabella è partizionata e il tuo caso d'uso lo consente, interroga solo la partizione specifica.
  • Quando crei la funzione Lambda, specifica la posizione della fuoriuscita in Amazon S3. Le risposte superiori alla soglia si riversano nella posizione S3 specificata.

Informazioni correlate

Risoluzione dei problemi in Athena

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa