MSCK REPAIR TABLE を実行すると、Amazon Athena はパーティションのリストを返します。しかしながら、Athena は AWS Glue データカタログのテーブルにパーティションを追加できません。
簡単な説明
以下の一般的な理由により、Athena がデータカタログのテーブルにパーティションを追加できないことがあります。
- 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 でデータカタログを使用する際は、IAM ポリシーにより glue:BatchCreatePartition アクションが許可される必要があります。ポリシーでこのアクションが許可されないと、Athena はメタストアにパーティションを追加できません。glue:BatchCreatePartition アクションを許可する IAM ポリシーの例については、「AWS 管理ポリシー: AmazonAthenaFullAccess」を参照してください。
Amazon S3 のパスを小文字に変更する
MSCK REPAIR TABLE でパーティションをデータカタログに追加するには、Amazon S3 パス名を小文字にする必要があります。
たとえば、Amazon S3 パスがキャメルケースで userId の場合、次のパーティションはデータカタログに追加されません。
- 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 テーブルにパーティションを追加します。
LOCATION 句は、非 Hive スタイルのパーティションデータに必要です。パーティションデータを含んでいるプレフィックスに対する 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 でのデータのパーティション化
Actions, resources, and condition keys for Amazon Athena
Actions, resources, and condition keys for AWS Glue