我查詢 Amazon Athena 資料表時收到錯誤 "HIVE_METASTORE_ERROR"。
簡短描述
請參閱下列類型的 "HIVE_METASTORE_ERROR" 錯誤及其原因:
- **HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: 錯誤:: 預期在結構 <test_column> 的位置 1234,卻找到 '/'。(服務:空值;狀態代碼: 0;錯誤代碼:空值;請求 ID:空值):**查詢資料表中的資料欄名稱包含特殊字元,或資料分割結構中的資料欄名稱包含特殊字元。Athena 不支援底線以外的特殊字元。如需詳細資訊,請參閱資料表、資料庫和資料欄的名稱。
- HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: 未填入必要的資料表儲存描述元:
StorageDescriptor 參數包含有關資料表實體儲存空間的資訊。如果資料表上的一個或多個磁碟分割因為磁碟分割損毁而無法設定磁碟分割位置,就會收到此錯誤。
- **HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: 回應承載大小 (11,112,222 位元組) 超過允許的最大承載大小 (6,291,556 位元組):**您可以使用 AWS Lambda 函數針對跨帳戶 AWS Glue Data Catalog 或外部 Hive 中繼存放區執行 Athena 查詢。但是,Lambda 的叫用承載限制為 6 MB。從 Lambda 傳回的物件大小超過 6 MB 時,就會收到此錯誤。Lambda 承載限制是一個硬性限制,無法增加。如需詳細資訊,請參閱 Lambda 配額。
解決方法
HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: 錯誤:: 預期在結構 <test_column> 的位置 1234,卻找到 '/'。(服務:空值;狀態代碼: 0;錯誤代碼:空值;請求 ID:空值)
若要解決此錯誤,請完成下列步驟:
- 若要以底線取代資料欄名稱中的特殊字元,請在資料上執行下列自訂指令碼:
import re
string = open('a.txt').read()
new_str = re.sub('/', '_', string)
open('b.txt', 'w').write(new_str)
HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: 未填入必要的資料表儲存描述元
若要解決此錯誤,請選擇下列一或多個解決方案:
- 如果您的資料表已進行分割,且資料以 Amazon Simple Storage Service (Amazon S3) Hive 分割區格式載入,則請載入分割區。執行類似下列範例的命令:
**注意:**請務必將 doc_example_table 以資料表名稱取代。
MSCK REPAIR TABLE doc_example_table
- 如果 MSCK REPAIR TABLE 命令無法解決問題,則請刪除資料表並建立具有相同定義的新資料表。然後,在新資料表上執行 MSCK REPAIR TABLE 命令。
- 在 Amazon S3 儲存貯體中建立個別資料夾,然後將要查詢的資料檔案移至該資料夾。建立指向該資料夾而非儲存貯體的 AWS Glue 爬蟲程式。
HIVE_METASTORE_ERROR: com.facebook.presto.spi.PrestoException: java.io.IOException: 回應承載大小 (11,112,222 位元組) 超過允許的最大承載大小 (6,291,556 位元組)
若要解決此錯誤,請選擇下列一或多個解決方案:
相關資訊
Athena 中的疑難排解