Come posso risolvere l'eccezione "HIVE_CURSOR_ERROR" quando interrogo una tabella in Amazon Athena?
Quando eseguo delle query sulla mia tabella Amazon Athena, ricevo un'eccezione "HIVE_CURSOR_ERROR".
Soluzione
È possibile ottenere questa eccezione in una delle seguenti condizioni:
- Gli oggetti dati nella posizione della tabella sono danneggiati, non sono validi o sono compressi in modo errato.
- I record all'interno dei dati della tabella non sono validi (esempio: un record JSON non valido).
Eccezioni HIVE_CURSOR_ERROR comuni
Potresti riscontrare una delle seguenti eccezioni quando si verifica un problema con questi oggetti nella posizione della tabella Amazon Simple Storage Service (Amazon S3):
- HIVE_CURSOR_ERROR: incorrect header check
- HIVE_CURSOR_ERROR: invalid block type
- HIVE_CURSOR_ERROR: incorrect data check
- HIVE\ _CURSOR\ _ERROR: Unexpected end of input stream
- HIVE_CURSOR_ERROR: invalid stored block lengths
- HIVE_CURSOR_ERROR: invalid distance code
Se di recente hai aggiunto nuovi oggetti alla posizione della tabella di Amazon S3, assicurati che questi oggetti siano validi e non danneggiati. Scarica gli oggetti, quindi usa il tuo strumento preferito per ispezionarli. Ad esempio, decomprimi gli oggetti compressi con GZIP per verificare se la compressione è valida.
Se la tabella è partizionata, controlla se sei in grado di interrogare le singole partizioni. Se nella tabella sono presenti nuove partizioni, è possibile che queste contengano oggetti non validi.
Eccezioni HIVE_CURSOR_ERROR specifiche
HIVE_CURSOR_ERROR: Row is not a valid JSON Object
Questo errore viene visualizzato quando una riga della tabella non è un record JSON valido.
Per risolvere questo problema, procedi come segue:
- Aggiungi la proprietà 'ignore.malformed.json' = 'true' per ricreare la tabella.
- Esegui un comando simile al seguente per interrogare la nuova tabella per identificare i file con record non validi:
SELECT "$path" FROM example_table WHERE example_column = NULL
Per ulteriori informazioni, consulta Perché ricevo errori quando provo a leggere i dati JSON in Amazon Athena? e OpenX JSON SerDe.
HIVE_CURSOR_ERROR: Corrupted uncompressed block
Questo errore si verifica quando usi il formato LZO per comprimere gli oggetti nella posizione della tabella.
Per risolvere questo errore con i dati compressi con LZO, ricrea la tabella con INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat". Ad esempio:
CREATE EXTERNAL TABLE example_table ( example_column_1 STRING, example_column_2 STRING ) STORED AS INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://example_bucket/example_prefix/'
È inoltre possibile utilizzare un formato di compressione diverso per risolvere questo errore.
HIVE_CURSOR_ERROR: Can not read value at 0 in block 0 in file
Questo errore si verifica quando sono presenti oggetti Parquet non validi nel percorso S3. Controlla se gli oggetti Parquet contengono tipi di dati DECIMAL. Se hai usato Spark per scrivere oggetti Parquet che contengono tipi di dati DECIMAL, questi potrebbero essere incompatibili con Hive. Per verificare questa condizione, leggi gli oggetti Parquet da un job Spark.
Se riesci usare il job Spark per leggere gli oggetti Parquet, riscrivi gli oggetti con la modalità legacy in Spark con la seguente configurazione:
spark.sql.parquet.writeLegacyFormat = true
Per informazioni sulle opzioni di configurazione di Spark per Parquet, consulta la pagina Configuration nel sito Web della guida SQL di Spark.
HIVE_CURSOR_ERROR: org.apache.hadoop.io.ArrayWritable cannot be cast to org.apache.hadoop.io.Text
Questo errore si verifica se è stato utilizzato un SerDe errato per la definizione della tabella. Ad esempio, la tabella potrebbe utilizzare un SerDe JSON e i dati di origine includono oggetti Parquet.
Per risolvere questo errore, controlla i dati di origine e conferma che sia stato utilizzato il SerDe corretto. Per ulteriori informazioni, consulta l'articolo Supported SerDes and data formats.
Errori HIVE_CURSOR_ERROR con i file letti da AWS Config
HIVE_CURSOR_ERROR: java.io.IOException: Start of Object expected
Questo errore si verifica quando i dati JsonSerDe non sono in grado di ottenere l'oggetto iniziale del record JSON. I dati non corrispondono allo schema o i file sono danneggiati quando si esegue una query.
Per risolvere questo errore, usa un SerDe diverso invece di quello predefinito org.apache.hive.hcatalog.data.jsonSerDe come ad esempio org.openx.data.jsonserde.JsonSerDe. Quindi, imposta la proprietà della tabella su 'ignore.malformed.json' = 'true'.
Per ulteriori informazioni, consulta JSON SerDe libraries.
HIVE_CURSOR_ERROR: java.io.IOException: Start token not found where expected.
Questo errore si verifica quando la posizione della tabella Athena contiene file diversi da quelli forniti da AWS Config. Ad esempio, quando l'output CSV di una query Athena è impostato nella stessa posizione dei file AWS Config in formato JSON.
Per risolvere questo errore, sposta o elimina i file che non vengono generati da AWS Config. Per i risultati delle query Athena, i file di output sono archiviati nel seguente modello di percorso:
QueryResultsLocationInS3/[QueryName|Unsaved/yyyy/mm/dd/]
HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key
Questo errore si verifica quando le risorse di AWS Config hanno più tag con lo stesso nome o alcuni sono in maiuscolo e altri in minuscolo.
Per risolvere questo errore, consulta How do I resolve "HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key" when reading files from AWS Config in Athena?
Informazioni correlate
Contenuto pertinente
- AWS UFFICIALEAggiornata 4 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 2 mesi fa