Como resolvo a exceção “HIVE_CURSOR_ERROR” ao consultar uma tabela no Amazon Athena?

5 minuto de leitura
0

Quando executo consultas na minha tabela do Amazon Athena, recebo uma exceção “HIVE_CURSOR_ERROR”.

Resolução

Você poderá obter essa exceção sob uma das seguintes condições:

  • Os objetos de dados na localização da tabela estão corrompidos, não são válidos ou estão compactados incorretamente.
  • Os registros nos dados da tabela não são válidos (exemplo: um registro JSON malformado).

Exceções comuns de HIVE_CURSOR_ERROR

Você poderá obter uma das seguintes exceções quando houver um problema com esses objetos no local da tabela do Amazon Simple Storage Service (Amazon S3):

  • HIVE_CURSOR_ERROR: verificação incorreta do cabeçalho
  • HIVE_CURSOR_ERROR: tipo de bloco inválido
  • HIVE_CURSOR_ERROR: verificação de dados incorreta
  • HIVE_CURSOR_ERROR: Fim inesperado do fluxo de entrada
  • HIVE_CURSOR_ERROR: comprimentos de bloco armazenados inválidos
  • HIVE_CURSOR_ERROR: código de distância inválido

Se tiver adicionado recentemente novos objetos ao local da tabela do Amazon S3, certifique-se de que esses objetos sejam válidos e não estejam corrompidos. Baixe os objetos e use sua ferramenta favorita para inspecioná-los. Por exemplo, descompacte os objetos compactados com GZIP para verificar se a compactação é válida.

Se sua tabela estiver particionada, verifique se você consegue consultar partições individuais. Se houver novas partições na tabela, elas poderão conter objetos que não são válidos.

Exceções específicas do HIVE_CURSOR_ERROR

HIVE_CURSOR_ERROR: Row is not a valid JSON Object

Você recebe esse erro quando uma linha na tabela não é um registro JSON válido.

Para resolver esse problema, faça o seguinte:

  1. Adicione a propriedade 'ignore.malformed.json' = 'true' para recriar a tabela.
  2. Execute um comando para consultar a nova tabela a fm de identificar os arquivos com registros malformados, semelhante ao seguinte:
SELECT "$path" FROM example_table WHERE example_column = NULL

Para obter mais informações, consulte Por que recebo erros quando tento ler dados JSON no Amazon Athena? e OpenX JSON SerDe.

HIVE_CURSOR_ERROR: Corrupted uncompressed block

Você recebe esse erro ao usar o formato LZO para compactar objetos no local da tabela.

Para resolver esse erro com dados compactados LZO, recrie a tabela com o INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat". Por exemplo:

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

Você também pode usar um formato de compactação diferente para resolver esse erro.

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

Você recebe esse erro quando tem objetos Parquet que não são válidos no caminho S3. Verifique se seus objetos Parquet contêm tipos de dados DECIMAL. Se você usou o Spark para gravar objetos Parquet que contêm tipos de dados DECIMAL, eles podem ser incompatíveis com o Hive. Para verificar essa condição, leia os objetos Parquet de um trabalho do Spark.

Se você puder usar o trabalho do Spark para ler os objetos Parquet, reescreva os objetos com modo legado no Spark com a seguinte configuração:

spark.sql.parquet.writeLegacyFormat = true

Para obter informações sobre opções de configuração do Spark para Parquet, consulte Configuration no site do Spark SQL.

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

Você receberá esse erro se usar um SerDe incorreto para a definição da tabela. Por exemplo, a tabela pode usar um SerDe JSON, e os dados de origem incluem objetos Parquet.

Para resolver esse erro, verifique os dados de origem e confirme se o SerDe correto foi usado. Para obter mais informações, consulte SerDes e formatos de dados compatíveis.

HIVE_CURSOR_ERROR errors with files read from AWS Config

HIVE_CURSOR_ERROR: java.io.IOException: Start of Object expected

Você recebe esse erro quando os dados JsonSerDe não conseguem obter o objeto inicial do registro JSON. Os dados não correspondem ao esquema, ou os arquivos estão corrompidos quando você executa uma consulta.

Para resolver esse erro, use um SerDe diferente em vez do org.apache.hive.hcatalog.data.JsonSerDe padrão, como org.openx.data.jsonserde.JsonSerDe. Em seguida, defina a propriedade da tabela como 'ignore.malformed.json' = 'true'.

Para obter mais informações, consulte Bibliotecas SerDe JSON.

HIVE_CURSOR_ERROR: java.io.IOException: Start token not found where expected.

Você recebe esse erro quando o local da tabela do Athena contém arquivos diferentes daqueles entregues pelo AWS Config. Por exemplo, quando uma saída CSV de consulta do Athena é definida no mesmo local que os arquivos do AWS Config no formato JSON.

Para resolver esse erro, mova ou exclua arquivos que não são gerados pelo AWS Config. Para resultados de consulta do Athena, os arquivos de saída serão armazenados no seguinte padrão de caminho:

QueryResultsLocationInS3/[QueryName|Unsaved/yyyy/mm/dd/]

HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key

Você recebe esse erro quando os recursos do AWS Config têm várias tags com o mesmo nome ou algumas estão em letras maiúsculas e outras em minúsculas.

Para resolver esse erro, consulte 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?

Informações relacionadas

Solução de problemas no Athena

AWS OFICIAL
AWS OFICIALAtualizada há um ano