執行我的 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 的動作、資源和條件金鑰