¿Cómo puedo solucionar la excepción «HIVE_CURSOR_ERROR» cuando consulto una tabla en Amazon Athena?

4 minutos de lectura
0

Cuando ejecuto consultas en mi tabla de Amazon Athena, se muestra la excepción «HIVE_CURSOR_ERROR».

Resolución

Esta excepción podría mostrarse en las siguientes situaciones:

  • Los objetos de datos de la ubicación de la tabla están dañados, no son válidos o no se han comprimido correctamente.
  • Los registros en los datos de la tabla no son válidos (por ejemplo: un registro JSON con formato incorrecto).

Excepciones HIVE_CURSOR_ERROR habituales

Si hay un problema en los objetos subyacentes, se podría mostrar una de las siguientes excepciones HIVE_CURSOR_ERROR:

  • HIVE_CURSOR_ERROR: comprobación de encabezado incorrecta
  • HIVE_CURSOR_ERROR: tipo de bloque no válido
  • HIVE_CURSOR_ERROR: comprobación de datos incorrecta
  • HIVE_CURSOR_ERROR: fin inesperado del flujo de entrada
  • HIVE_CURSOR_ERROR: longitudes de bloque almacenado no válidas
  • HIVE_CURSOR_ERROR: código de distancia no válido

Si ha añadido objetos nuevos a la ubicación de su tabla de Amazon Simple Storage Service (Amazon S3) recientemente, asegúrese de que sean válidos y no estén dañados. Descargue los objetos y, a continuación, inspecciónelos con la herramienta adecuada. Por ejemplo, descomprima los objetos comprimidos en GZIP para comprobar si la compresión es válida.

Si la tabla tiene particiones, compruebe si puede consultar particiones individuales. Si hay particiones nuevas en la tabla, es posible que contengan objetos que no sean válidos.

Excepciones HIVE_CURSOR_ERROR específicas

HIVE_CURSOR_ERROR: la fila no es un objeto JSON válido

Este error se muestra cuando una fila de la tabla no es un registro JSON válido.

Para solucionar este problema, siga estos pasos:

  1. Vuelva a crear la tabla con la propiedad 'ignore.malformed.json' = 'true'.
  2. Consulte la nueva tabla para identificar los archivos con registros mal formados mediante la ejecución de un comando similar al siguiente:
SELECT "$path" FROM example_table WHERE example_column = NULL

Para obtener más información, consulte Resolve JSON errors in Amazon Athena y OpenX JSON SerDe Options.

HIVE_CURSOR_ERROR: bloque descomprimido dañado

Este error se muestra cuando los objetos de la ubicación de la tabla se comprimen con el formato LZO.

Para evitar este error en el caso de los datos comprimidos con LZO, vuelva a crear la tabla con el INPUTFORMAT «com.hadoop.mapred.DeprecatedLzoTextInputFormat». Por ejemplo:

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/'

Para solucionar este error, también puede utilizar otro formato de compresión.

HIVE_CURSOR_ERROR: no se puede leer el valor 0 en el bloque 0 del archivo

Este error se muestra cuando hay objetos de Parquet no válidos en la ruta de S3. Compruebe si sus objetos de Parquet contienen datos del tipo DECIMAL. Si los objetos de Parquet contienen datos del tipo DECIMAL y se escribieron con Spark, es posible que no sean compatibles con Hive. Para comprobarlo, intente leer los objetos de Parquet de un trabajo de Spark.

Si puede leer los objetos de Parquet mediante el trabajo de Spark, vuelva a escribir los objetos de Parquet con el modo heredado en Spark y la siguiente configuración:

spark.sql.parquet.writeLegacyFormat = true

Para obtener información sobre las opciones de configuración de Spark para Parquet, consulte Configuration en la guía SQL de Spark.

HIVE_CURSOR_ERROR: org.apache.hadoop.io.ArrayWritable no se puede convertir en org.apache.hadoop.io.Text

Este error se muestra si ha utilizado un valor de SerDe incorrecto durante la definición de la tabla. Por ejemplo, puede que la tabla utilice JSON SerDe, pero los datos de origen incluyan objetos de Parquet.

Para solucionar este error, compruebe los datos de origen y confirme que se ha utilizado el valor de SerDe correcto. Para obtener más información, consulte Supported SerDes and data formats.


Información relacionada

¿Cómo puedo solucionar «HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key» al leer archivos de AWS Config en Athena?

Troubleshooting in Athena

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 años