為什麼我的 MSCK REPAIR TABLE 查詢無法將分割區新增到 AWS Glue Data Catalog?

1 分的閱讀內容
0

執行我的 MSCK REPAIR TABLE 查詢時,Amazon Athena 傳回分割區清單。但是,Athena 無法將分割區新增到 AWS Glue Data Catalog 中的資料表。

簡短說明

下列常見原因導致 Athena 無法將分割區新增到 Data Catalog 中的資料表:

  • AWS Identity and Access Management (IAM) 使用者或角色沒有允許 glue:BatchCreatePartition 動作的政策。
  • Amazon Simple Storage Service (Amazon S3) 路徑採用駝峰式大小寫,而不是小寫。
  • 分割區未格式化成 Hive 樣式格式:year=2023/month=01/day=01。分割區反而採用非 HIVE 樣式格式: /2023/01/01/。

解決方法

IAM 政策中允許 glue:BatchCreatePartition

檢閱附加至用來執行 MSCK REPAIR TABLE 之使用者或角色的 IAM 政策。當您 搭配 Athena 使用 Data Catalog時,IAM 政策必須允許glue:BatchCreatePartition 動作。如果政策不允許該動作,則 Athena 無法將分割區新增至中繼存放區。如需允許 glue:BatchCreatePartition 動作的 IAM 政策範例,請參閱 AWS 受管政策: AmazonAthenaFullAccess

將 Amazon S3 路徑更改為小寫

對於要新增分割區到 Data Catalog 的 MSCK REPAIR TABLE,Amazon S3 路徑名稱必須採用小寫字母。

例如,如果 Amazon S3 路徑是採用駝峰式大小寫的 userId,則下列分割區無法新增至 Data Catalog:

  • s3://awsdoc-example-bucket/path/userId=1/
  • s3://awsdoc-example-bucket/path/userId=2/
  • s3://awsdoc-example-bucket/path/userId=3/

若要解決此問題,請使用小寫 userid

  • s3://awsdoc-example-bucket/path/userid=1/
  • s3://awsdoc-example-bucket/path/userid=2/
  • s3://awsdoc-example-bucket/path/userid=3/

執行 ALTER TABLE ADD PARTITION 命令

執行 ALTER TABLE ADD PARTITION 命令,以將分割區新增到 Hive 樣式和非 Hive 樣式分割區資料的 Glue 資料表。

非 Hive 樣式分割區資料需要 LOCATION 子句。請務必包括字首的完整 Amazon S3 路徑 (包含分割區資料):

ALTER TABLE orders ADD

PARTITION (year = '2023', month = '01', day ='01')
LOCATION 's3://mystorage/path/to/test/'

PARTITION (year = '2023', month = '01', day ='02')
LOCATION 's3://mystorage/path/to/test/';

相關資訊

在 Athena 分割資料

Amazon Athena 的動作、資源和條件金鑰

AWS Glue 的動作、資源和條件金鑰

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