MSCK REPAIR TABLE - Amazon Athena

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

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 table-name DROP PARTITION 詳細については、「ALTER TABLE DROP PARTITION」を参照してください。

考慮事項と制約事項

MSCK REPAIR TABLE を使用する際は、次のポイントに注意が必要です。

  • コマンドは Amazon S3 HeadObject および GetObject コマンドを実行しているファイルシステムを横断するため、ファイルシステムが大きい場合、または大量のデータが含まれている場合、スキャンされるバイトのコストが大きくなる可能性があります。

  • すべてのパーティションを追加するには時間がかかる場合があります。このオペレーションがタイムアウトになると、未完了状態となり、一部のパーティションのみがカタログに追加されます。すべてのパーティションが追加されるまで、同じテーブルで MSCK REPAIR TABLE を実行してください。詳細については、「データのパーティション分割」を参照してください。

  • Hive と互換性のないパーティションの場合、ALTER TABLE ADD PARTITION を使用してパーティションをロードすることで、データをクエリできるようにします。

  • Athena で使用するパーティションの場所では、s3 プロトコル (s3://bucket/folder/ など) を使用する必要があります。Athena では、他のプロトコル (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-datas3://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:BatchCreatePartitionglue: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/