MSCK REPAIR TABLE クエリで AWS Glue データカタログにパーティションが追加されないのはなぜですか?

所要時間1分
0

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

AWS公式
AWS公式更新しました 1年前
コメントはありません