「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」
MSCK REPAIR TABLE
Hive 互換パーティションを追加したら、MSCK REPAIR TABLE
コマンドを使用してカタログ内のメタデータを更新します。
コマンドは、テーブルの作成後にファイルシステムに追加された Hive 互換パーティションの MSCK REPAIR TABLE
などのファイルシステムをスキャンします。Amazon S3MSCK REPAIR TABLE
は、テーブルメタデータ内のパーティションと S3 内のパーティションを比較します。テーブルの作成時に指定した S3 の場所に新しいパーティションがある場合、そのパーティションはメタデータおよび
Athena テーブルに追加されます。
物理パーティションを追加すると、カタログのメタデータがファイルシステムのデータのレイアウトと不整合になるため、新しいパーティションに関する情報をカタログに追加する必要があります。メタデータを更新するには、MSCK REPAIR TABLE
を実行して、Athena から新しいパーティションのデータをクエリできるようにします。
MSCK REPAIR TABLE
はメタデータにのみパーティションを追加し、削除しません。でパーティションを手動で削除した後でメタデータからパーティションを削除するには、コマンド Amazon S3
を実行します。ALTER TABLE
詳細については、「ALTER TABLE DROP PARTITION」を参照してください。
table-name
DROP
PARTITION
考慮事項と制約事項
MSCK REPAIR TABLE
を使用する際は、次のポイントに注意が必要です。
-
コマンドは Amazon S3 HeadObject および GetObject コマンドを実行しているファイルシステムを横断するため、ファイルシステムが大きい場合、または大量のデータが含まれている場合、スキャンされるバイトのコストが大きくなる可能性があります。
-
すべてのパーティションを追加するには時間がかかる場合があります。このオペレーションがタイムアウトになると、未完了状態となり、一部のパーティションのみがカタログに追加されます。すべてのパーティションが追加されるまで、同じテーブルで
MSCK REPAIR TABLE
を実行してください。詳細については、「データのパーティション分割」を参照してください。 -
Hive と互換性のないパーティションの場合、ALTER TABLE ADD PARTITION を使用してパーティションをロードすることで、データをクエリできるようにします。
-
Athena で使用するパーティションの場所では、
s3
プロトコル (s3://
など) を使用する必要があります。Athena では、他のプロトコル (bucket
/folder
/s3a://
など) を使用する場所があると、その場所が含まれているテーブルに対してbucket
/folder
/MSCK REPAIR TABLE
クエリを実行したときに、クエリが失敗します。 -
は両方のフォルダのサブフォルダをスキャンして一致するパーティションスキームを見つけるため、個別のテーブルのデータは個別のフォルダ階層に保存してください。
MSCK REPAIR TABLE
たとえば、s3://table-a-data
にテーブル A、s3://table-a-data/table-b-data
にテーブル B のデータがあるとします。 両方のテーブルが文字列でパーティション化されている場合、MSCK REPAIR TABLE
はテーブル A にテーブル B のパーティションを追加します。これを回避するには、代わりにs3://table-a-data
やs3://table-b-data
などの個別のフォルダ構造を使用します。この動作は、Amazon EMR および Apache Hive と一貫しています。
Synopsis
MSCK REPAIR TABLE table_name
Examples
MSCK REPAIR TABLE orders;
Troubleshooting
を実行した後、MSCK REPAIR TABLE
によって Athena のテーブルにパーティションが追加されない場合は、次の点を確認してください。AWS Glue データカタログ
-
AWS Identity and Access Management (IAM) ユーザーまたはロールに、
glue:BatchCreatePartition
アクションを許可するポリシーがあることを確認します。 -
ユーザーまたはロールに、IAMAmazon S3 アクションを含む、
s3:DescribeJob
にアクセスするために十分なアクセス許可を持つポリシーがあることを確認します。許可する Amazon S3 アクションの例については、「Amazon S3 バケットへの Athena のクロスアカウントアクセス」のバケットポリシー例を参照してください。 -
Amazon S3 パスがキャメルケースではなく小文字になっていることを確認します (たとえば、
userId
ではなくuserid
)。 -
クエリタイムアウト –
MSCK REPAIR TABLE
は、テーブルを初めて作成するときや、データとパーティションのメタデータのパリティに不確実性がある場合に最適です。を使用して新しいパーティションを頻繁に追加する場合 (たとえば、毎日)、クエリのタイムアウトが発生している場合は、MSCK REPAIR TABLE
の使用を検討してください。ALTER TABLE ADD PARTITION -
[ パーティションがファイルシステムにない–] Amazon S3 でパーティションを手動で削除し、
MSCK REPAIR TABLE
を実行した場合、エラーメッセージ が表示される場合があります。Partitions missing from filesystem
。 これは、MSCK REPAIR TABLE
が古いパーティションをテーブルのメタデータから削除しないために発生します。テーブルメタデータから削除されたパーティションを削除するには、代わりに ALTER TABLE DROP PARTITION を実行します。[SHOW PARTITIONS] でも同様に、メタデータ内のパーティションだけが一覧表示され、ファイルシステム内のパーティションは一覧表示されません。
以下のセクションでは、その他の詳細について説明します。
IAM ポリシーで glue:BatchCreatePartition を許可します。
の実行に使用しているユーザーまたはロールにアタッチされている IAM ポリシーを確認します。MSCK REPAIR TABLE
Athena で AWS Glue データカタログを使用する場合、 ポリシーで IAM アクションを許可する必要があります。glue:BatchCreatePartition
glue:BatchCreatePartition
アクションを許可する IAM ポリシーの例については、「AmazonAthenaFullAccess 管理ポリシー」を参照してください。
Amazon S3 パスを小文字に変更する
Amazon S3 パスは小文字にする必要があります。S3 パスがキャメルケースの場合、MSCK
REPAIR TABLE
は AWS Glue データカタログ にパーティションを追加しません。たとえば、S3 パスが userId
の場合、次のパーティションは AWS Glue データカタログ に追加されません。
s3://bucket/path/userId=1/ s3://bucket/path/userId=2/ s3://bucket/path/userId=3/
この問題を解決するには、キャメルケースではなくフラットケースを使用します。
s3://bucket/path/userid=1/ s3://bucket/path/userid=2/ s3://bucket/path/userid=3/