Cookie の設定を選択する

当社は、当社のサイトおよびサービスを提供するために必要な必須 Cookie および類似のツールを使用しています。当社は、パフォーマンス Cookie を使用して匿名の統計情報を収集することで、お客様が当社のサイトをどのように利用しているかを把握し、改善に役立てています。必須 Cookie は無効化できませんが、[カスタマイズ] または [拒否] をクリックしてパフォーマンス Cookie を拒否することはできます。

お客様が同意した場合、AWS および承認された第三者は、Cookie を使用して便利なサイト機能を提供したり、お客様の選択を記憶したり、関連する広告を含む関連コンテンツを表示したりします。すべての必須ではない Cookie を受け入れるか拒否するには、[受け入れる] または [拒否] をクリックしてください。より詳細な選択を行うには、[カスタマイズ] をクリックしてください。

MSCK REPAIR TABLE

フォーカスモード

このページの内容

MSCK REPAIR TABLE - Amazon Athena

Hive 互換パーティションを追加した後でカタログ内のメタデータを更新するには、MSCK REPAIR TABLE コマンドを使用します。

MSCK REPAIR TABLE コマンドは、テーブルの作成後にファイルシステムに追加された Hive 互換パーティションで Simple Storage Service (Amazon S3) などのファイルシステムをスキャンします。MSCK REPAIR TABLE は、テーブルメタデータのパーティションと S3 のパーティションを比較します。テーブルの作成時に指定した S3 の場所に新しいパーティションが存在する場合は、これらのパーティションがメタデータと Athena のテーブルに追加されます。

物理パーティションを追加すると、カタログ内のメタデータがファイルシステム内のデータのレイアウトと整合しなくなるので、新しいパーティションに関する情報をカタログに追加する必要があります。メタデータを更新するには、Athena から新しいパーティションのデータをクエリできるように MSCK REPAIR TABLE を実行します。

注記

MSCK REPAIR TABLE は、パーティションをメタデータに追加するだけであり、パーティションを削除しません。Amazon S3 でパーティションが手動で削除された後でメタデータからそれらのパーティションを削除するには、コマンド ALTER TABLE table-name DROP PARTITION を実行します。詳細については、「ALTER TABLE DROP PARTITION」を参照してください。

考慮事項と制限事項

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

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

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

  • Athena で使用されるパーティションの場所は、s3 プロトコル (s3://amzn-s3-demo-bucket/folder/ など) を使用する必要があります。Athena では、他のプロトコル (s3a://bucket/folder/ など) を使用する場所は、そこにあるテーブルに対して MSCK REPAIR TABLE クエリを実行する場合にクエリが失敗する原因になります。

  • MSCK REPAIR TABLE がフォルダとそのサブフォルダの両方をスキャンして一致するパーティションスキームを検索するため、別個のテーブルのデータは別個のフォルダ階層に保存するようにしてください。例えば、テーブル 1 のデータが s3://amzn-s3-demo-bucket1 にあり、テーブル 2 のデータが s3://amzn-s3-demo-bucket1/table-2-data にあるとします。両方のテーブルが文字列でパーティション分割されている場合、MSCK REPAIR TABLE はテーブル 2 のパーティションをテーブル 1 に追加します。これを回避するには、この代わりに s3://amzn-s3-demo-bucket2s3://amzn-s3-demo-bucket1 といった別個のフォルダ構造を使用します。この動作は、Amazon EMR および Apache Hive と同じであることに注意してください。

  • 既知の問題により、パーティション値にコロン (:) 記号が含まれている場合 (例えば、パーティション値がタイムスタンプの場合)、MSCK REPAIR TABLE は警告なしに失敗します。回避方法として、ALTER TABLE ADD PARTITION を使用します。

  • MSCK REPAIR TABLE では、アンダースコア (_) で始まるパーティション列名は追加されません。この制限を回避するには、ALTER TABLE ADD PARTITION を使用します。

概要

MSCK REPAIR TABLE table_name

MSCK REPAIR TABLE orders;

トラブルシューティング

MSCK REPAIR TABLE の実行後、AWS Glue Data Catalog のテーブルにパーティションが追加されない場合は、以下をチェックしてください。

  • AWS Glue アクセス – AWS Identity and Access Management (IAM) ロールに、glue:BatchCreatePartition アクションを許可するポリシーがあることを確認します。詳細については、このドキュメントで後述する「IAM ポリシーで glue:BatchCreatePartition を許可する」を参照してください。

  • Amazon S3 アクセス – ロールに s3:DescribeJob アクションを含む Amazon S3 にアクセスするために、十分なアクセス許可を持つポリシーがあることを確認します。許可する Simple Storage Service (Amazon S3) アクションの例については、「Athena で Amazon S3 バケットへのクロスアカウント アクセスを構成する」のバケットポリシー例を参照してください。

  • Amazon S3 オブジェクトキーの大文字と小文字の区別 – Amazon S3 パスがキャメルケースではなく小文字になっている (例: userId ではなく userid) ことを確認するか、ALTER TABLE ADD PARTITION を使用してオブジェクトキー名を指定します。詳細については、このドキュメントで後述する「Amazon S3 パスを変更するか再度定義する」を参照してください。

  • クエリのタイムアウト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 も同様に、ファイルシステムのパーティションではなく、メタデータのパーティションだけをリストすることに注意してください。

  • 「NullPointerException 名は null です」というエラー

    AWS Glue CreateTable API 操作や AWS CloudFormation AWS::Glue::Table テンプレートを使用して、TableType プロパティを指定せずに Athena で使用するテーブルを作成し、SHOW CREATE TABLE または MSCK REPAIR TABLE などの DDL クエリを実行すると、「失敗: NullPointerException 名は null です」というエラーメッセージを受け取る場合があります。

    このエラーを解決するには、TableInput TableType 属性の値を AWS Glue CreateTable API コール、または AWS CloudFormation テンプレートの一部として指定します。TableType に使用できる値には、EXTERNAL_TABLEVIRTUAL_VIEW が含まれます。

    この要件は、AWS Glue CreateTable API 操作や AWS::Glue::Table テンプレートを使用してテーブルを作成する場合にだけ適用されます。DDL ステートメントや AWS Glue クローラを使用して Athena のテーブルを作成すると、TableType プロパティが自動的に定義されます。

以下のセクションで詳細を説明します。

IAM ポリシーで glue:BatchCreatePartition を許可する

MSCK REPAIR TABLE の実行に使用しているロールにアタッチされている IAM ポリシーを見直します。Athena で AWS Glue Data Catalog を使用する場合は、IAM ポリシーで glue:BatchCreatePartition アクションが許可されている必要があります。glue:BatchCreatePartition アクションを許可する IAM ポリシーの例については、「AWS 管理ポリシー: AmazonAthenaFullAccess」を参照してください。

Amazon S3 パスを変更するか再度定義する

Amazon S3 パスの 1 つ以上のオブジェクトキーが小文字ではなくキャメルケースになっている場合、MSCK REPAIR TABLE がパーティションを AWS Glue Data Catalog に追加しない場合があります。例えば、Amazon S3 パスにオブジェクトキー名 userId が含まれている場合、次のパーティションが AWS Glue Data Catalog に追加されない可能性があります。

s3://amzn-s3-demo-bucket/path/userId=1/ s3://amzn-s3-demo-bucket/path/userId=2/ s3://amzn-s3-demo-bucket/path/userId=3/

この問題を解決するには、次のいずれかを実行します。

  • Amazon S3 オブジェクトキーを作成するときには、キャメルケースではなく小文字を使用してください。

    s3://amzn-s3-demo-bucket/path/userid=1/ s3://amzn-s3-demo-bucket/path/userid=2/ s3://amzn-s3-demo-bucket/path/userid=3/
  • 次の例に示されているように、ALTER TABLE ADD PARTITION を使用して場所を再度定義します。

    ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION (userId=1) LOCATION 's3://amzn-s3-demo-bucket/path/userId=1/' PARTITION (userId=2) LOCATION 's3://amzn-s3-demo-bucket/path/userId=2/' PARTITION (userId=3) LOCATION 's3://amzn-s3-demo-bucket/path/userId=3/'

Amazon S3 オブジェクトキー名には大文字を使用できますが、Amazon S3 バケットの名称は常に小文字にする必要があります。詳細については、「Amazon S3 ユーザーガイド」の「オブジェクトキー命名ガイドライン」と「バケット命名規則」を参照してください。

プライバシーサイト規約Cookie の設定
© 2025, Amazon Web Services, Inc. or its affiliates.All rights reserved.