Come posso risolvere l'errore "HIVE_METASTORE_ERROR" quando eseguo una query su una tabella in Amazon Athena?
Ricevo l'errore "HIVE_METASTORE_ERROR" quando eseguo una query sulla mia tabella Amazon Athena.
Risoluzione
Vedi i seguenti tipi di errori "HIVE_METASTORE_ERROR" per la causa e la risoluzione.
Nota: se ricevi messaggi di errore durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), consulta la sezione Troubleshoot AWS CLI errors. Inoltre, assicurati di utilizzare la versione più recente di AWS CLI.
"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)"
-oppure-
"HIVE_METASTORE_ERROR: com.amazonaws.services.datacatalog.model.InvalidInputException: Error: : expected at the position 11884 of ... but '#' is found"
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.
Per risolvere questo errore, è necessario sostituire il carattere speciale nel nome della colonna con un trattino basso. Quindi, modifica lo schema esistente della tabella.
L'esempio seguente di tabella AWS Glue contiene un file di dati denominato "a.txt" con il carattere speciale "/":
col/1,col_2,col/3 data1,data2,data3 data4,data5,data6
-
Per sostituire il carattere speciale "/" con un trattino basso "_", esegui il seguente script:
string = open('a.txt').readlines() string[0] = string[0].replace('/', '_') open('b.txt', 'w').write(string)
Esempio di output con un nuovo file di dati "b.txt":
col_1,col_2,col_3 data1,data2,data3 data4,data5,data6
-
Modifica lo schema esistente della tabella dalla console AWS Glue, quindi sostituisci '/' con qualsiasi altro carattere supportato da Athena.
"HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: Required Table Storage Descriptor is not populated"
-oppure-
"HIVE_METASTORE_ERROR: Table is missing storage descriptor"
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.
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: 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.
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 su come generare 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.
"HIVE_METASTORE_ERROR: Failed to fetch partitions from Glue Data Catalog"
Questo errore si verifica per uno dei seguenti motivi:
- Il nome della colonna presente nei metadati della partizione contiene caratteri speciali diversi da un trattino basso. Per ulteriori informazioni, consulta Nomi per tabelle, database e colonne.
- Le informazioni SerDe non sono presenti nello StorageDescriptor definito nei metadati della partizione.
Per identificare la partizione con il problema, effettuate una delle seguenti operazioni:
- Controlla la cronologia degli eventi di AWS CloudTrail per le chiamate alle API CreatePartition e BatchCreatePartition dopo l'ultima query eseguita con successo.
- Esegui il comando AWS CLI get-partitions sulla tua tabella Glue per estrarre le informazioni sulla partizione dal catalogo AWS Glue.
Per risolvere il problema della partizione, esegui l'istruzione DDL ALTER TABLE DROP PARTITION per eliminare la partizione. Quindi, esegui una delle seguenti operazioni:
- Esegui il comando AWS CLI create-partition per ricreare la partizione.
- Crea un crawler Glue per la posizione Amazon S3 delle tabelle. Assicurati di impostare l'opzione di configurazione del crawler per aggiornare tutte le partizioni nuove ed esistenti con i metadati della tabella.
Informazioni correlate
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata un anno fa