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

5 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 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:

  1. Aggiungi la proprietà 'ignore.malformed.json' = 'true' per ricreare la tabella.
  2. 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

Troubleshooting in Athena

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa