在Athena中讀取表時發生HIVE_CURSOR_ERROR錯誤

當您試圖在Athena中讀取一個表時,選擇查詢返回一個HIVE_CURSOR_ERROR消息。

寫的annapurna.hiriyur

最近一次發布時間:2022年5月10日

問題

在Athena中創建一個外部表,並使用指令將其與Delta Lake集成在一起Presto和雅典娜到三角洲湖的整合文檔。

Athena中的外部表在Apache Hive metastore中定義。

您從Athena查詢編輯器對外部表運行一個選擇查詢,它返回一個HIVE_CURSOR_ERROR

//

導致

問題的根本原因在於Hive和Apache Spark中使用的Parquet約定不同。

在Spark 1.4及以上版本中,使用當前的Parquet格式,並將十進製值寫成整數。在Parquet格式的早期版本中,十進製值是用Apache的固定長度字節數組格式寫入的。其他Apache係統(如Hive和Apache Impala)也使用這種Parquet格式。

因此,當由於使用了兩種Parquet格式而導致數據類型的內部表示形式不同時,您將收到一個錯誤。

解決方案

如果你正在使用Athena或Presto訪問Delta Lake管理的表,Parquet文件必須以與Hive兼容的格式創建。

你不能在Hive中選擇Parquet約定,但你可以在Spark中這樣做。

設置spark.conf.set(“spark.sql.parquet.writeLegacyFormat”,真的)屬性以解決該問題。

設置集群級別的屬性。

  1. 編輯集群屬性。
  2. 點擊高級選項
  3. 選擇火花
  4. 中輸入屬性設置火花配置字段。
  5. 確認更改。
  6. 重新啟動集群。
刪除

信息

根據Spark的數據類型修改表的DDL,不會返回任何查詢結果。spark.conf.set(“spark.sql.parquet.writeLegacyFormat”,真的)必須設置。

請檢查劇場正廳座位配置獲取更多信息的文檔。