Como resolvo a exceção “HIVE_CURSOR_ERROR” ao consultar uma tabela no Amazon Athena?
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:
- Adicione a propriedade 'ignore.malformed.json' = 'true' para recriar a tabela.
- 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
Conteúdo relevante
- feita há 25 diaslg...
- feita há 11 diaslg...
- Resposta aceitafeita há 9 diaslg...
- feita há 11 diaslg...
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 4 anos
- AWS OFICIALAtualizada há 4 anos