Come posso risolvere l'eccezione "HIVE_CURSOR_ERROR" quando interrogo una tabella in Amazon Athena?

3 minuti di lettura
0

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 ricevere una delle seguenti eccezioni HIVE\ _CURSOR\ _ERROR in caso di problemi con gli oggetti sottostanti:

  • 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 Simple Storage Service (Amazon S3), assicurati che siano validi e non danneggiati. Scarica gli oggetti e poi ispezionali utilizzando uno strumento appropriato. Ad esempio, decomprimi gli oggetti compressi con GZip per verificare se la compressione è valida.

Se la tua tabella è partizionata, controlla se sei in grado di interrogare singole partizioni. Se nella tabella sono presenti nuove partizioni, è possibile che 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 all'interno della tabella non è un record JSON valido.

Per risolvere questo problema, procedi come segue:

  1. Ricrea la tabella aggiungendo la proprietà 'ignore.malformed.json' = 'true'.
  2. Interroga la nuova tabella per identificare i file con record non validi eseguendo un comando simile al seguente:
SELECT "$path" FROM example_table WHERE example_column = NULL

Per ulteriori informazioni, vedi come risolvere gli errori JSON nelle opzioni Amazon Athena e OpenX JSON SerDe.

HIVE_CURSOR_ERROR: Corrupted uncompressed block

Questo errore viene visualizzato quando gli oggetti nella posizione della tabella vengono compressi utilizzando il formato LZO.

Per evitare di ricevere 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 risolvere questo errore utilizzando un formato di compressione diverso.

HIVE_CURSOR_ERROR: Can not read value at 0 in block 0 in file

Questo errore viene visualizzato quando sono presenti oggetti Parquet non validi nel percorso S3. Controlla se i tuoi oggetti Parquet contengono tipi di dati DECIMAL. Se gli oggetti Parquet contengono tipi di dati DECIMAL e sono stati scritti utilizzando Spark, potrebbero essere incompatibili con Hive. Per verificare questa condizione, prova a leggere gli oggetti Parquet da un job Spark.

Se riesci a leggere gli oggetti Parquet usando il job Spark, riscrivi gli oggetti Parquet 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 di configurazione nella guida SQL di Spark.

HIVE_CURSOR_ERROR: org.apache.hadoop.io.ArrayWritable cannot be cast to org.apache.hadoop.io.Text

Questo errore viene visualizzato se è stato utilizzato un SerDe errato durante 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, vedi l'articolo Supported SerDes and data formats.


Informazioni correlate

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?

Troubleshooting in Athena

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa