如何解決在 Amazon Athena 中查詢資料表時出現的「HIVE_CURSOR_ERROR」例外狀況?

1 分的閱讀內容
0

在我的 Amazon Athena 資料表上執行查詢時,收到「HIVE_CURSOR_ERROR」例外狀況。

解決方法

在下列其中一種情況下,您可能會收到此例外狀況:

  • 資料表位置的資料物件已損毀、無效或壓縮不正確。
  • 資料表資料的記錄無效 (例如:格式錯誤的 JSON 記錄)。

通用 HIVE_CURSOR_ERROR 例外狀況

基礎物件發生問題時,您可能會收到下列其中一個 HIVE\ _CURSOR\ _ERROR 例外狀況:

  • HIVE_CURSOR_ERROR:不正確的標頭檢查
  • HIVE_CURSOR_ERROR:無效的區塊類型
  • HIVE_CURSOR_ERROR:不正確的資料檢查
  • HIVE_CURSOR_ERROR: 意外的輸入串流結束
  • HIVE_CURSOR_ERROR:無效的儲存區塊長度
  • HIVE_CURSOR_ERROR:無效的距離代碼

如果您最近將物件新增至 Amazon Simple Storage Service (Amazon S3) 資料表位置,則要確保這些物件有效且未損毀。下載物件,然後使用適當的工具檢查。例如,解壓縮 GZIP 壓縮的物件以檢查壓縮是否有效。

如果您的資料表已分割,檢查您是否可查詢個別分割區。如果資料表有新的分割區,則可能包含無效的物件。

特定 HIVE_CURSOR_ERROR 例外狀況

HIVE_CURSOR_ERROR: 資料列不是有效的 JSON 物件

資料表的資料列不是有效的 JSON 記錄時,您會收到此錯誤。

若要解決此問題,請執行下列動作:

  1. 透過新增屬性 'ignore.malformed.json' = 'true' 重新建立資料表。
  2. 執行類似下列的命令,查詢新資料表以識別包含格式錯誤之記錄的檔案:
SELECT "$path" FROM example_table WHERE example_column = NULL

如需詳細資訊,請參閱解決 Amazon Athena 中的 JSON 錯誤OpenX JSON SerDe 選項

HIVE_CURSOR_ERROR: 已損毀的未壓縮區塊

使用 LZO 格式壓縮資料表位置的物件時,您會收到此錯誤。

要避免使用 LZOO 壓縮的資料時收到此錯誤,請使用 INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat" 重新建立資料表。例如:

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

您也可以使用不同的壓縮格式解決此錯誤。

HIVE_CURSOR_ERROR: 無法讀取檔案中區塊 0 中 0 位置的值

S3 路徑中有無效的 Parquet 物件時,您會收到此錯誤。檢查您的 Parquet 物件是否包含十進位資料類型。如果 Parquet 物件包含十進位資料類型,且使用 Spark 編寫,則可能與 Hive 不相容。要檢查這種情況,嘗試從 Spark 工作讀取 Parquet 物件。

如果您可以使用 Spark 工作讀取 Parquet 物件,則使用下列組態在 Spark 中使用傳統模式重寫 Parquet 物件:

spark.sql.parquet.writeLegacyFormat = true

如需用於 Parquet 的 Spark 組態選項的資訊,請參閱 Spark SQL 指南中的組態

HIVE_CURSOR_ERROR: org.apache.hadoop.io.ArrayWritable 無法轉換為 org.apache.hadoop.io.Text

如果您在資料表定義期間使用不正確的 SerDe,就會收到此錯誤。例如,資料表可能使用 JSON SerDe,而來源資料包含 Parquet 物件。

要解決此錯誤,請檢查來源資料並確認使用正確的 SerDe。如需詳細資訊,請參閱支援的 SerDes 和資料格式


相關資訊

我如何解決從 Athena 中的 AWS Config 讀取檔案時的「HIVE_CURSOR_ERROR: 資料列不是有效的 JSON 物件 - JSONException: 重複的索引鍵」?

Athena 疑難排解

AWS 官方
AWS 官方已更新 3 年前