Amazon Athena で実行に時間がかかりすぎたり、タイムアウトしたりする MSCK REPAIR TABLE コマンドを解決したいと考えています。
簡単な説明
MSCK REPAIR TABLE コマンドを実行すると、Athena は Amazon Simple Storage Service (Amazon S3) のプレフィックスとオブジェクトを一覧表示します。Amazon S3 プレフィックスまたはオブジェクトが多すぎると、コマンドの実行に時間がかかる、またはエラーが発生してタイムアウトする場合があります。
この問題を解決するには、以下のいずれかを実行します。
- Athena でパーティションプロジェクションを使用します。
- AWS Glue クローラーを使用して、Athena テーブルにパーティションを追加します。
- Athena DDL ステートメントを使用してパーティションをロードする
解決策
Athena でパーティションプロジェクションを使用する
Athena でパーティションプロジェクションを使用して、メモリ内にパーティションを生成します。パーティションを AWS Glue データカタログに追加したり、データカタログから取得したりする必要はありません。Athena は、多数のパーティションリストをスキャンするのではなく、テーブルの値を計算します。また、パーティションプロジェクションは、AWS Glue データカタログなどのリポジトリからではなく、設定から値と場所を計算します。
AWS Glue クローラーを使用して Athena テーブルにパーティションを追加する
AWS Glue クローラーを使用して Athena テーブルにパーティションを追加するには、次の手順を実行します。
- AWS Glue コンソールを開きます。
- ナビゲーションペインで クローラー、クローラーを作成の順に選択します。
- クローラーの名前を作成し、次へを選択します。
- データソースと分類子の選択とデータソースの設定で、**データは既に Glue テーブルにマップされていますか?**で、はいを選択します。
- Glue テーブルで、テーブルの追加を選択し、必要なデータベースとテーブルを選択します。次へを選択します。
- AWS Glue の IAM ロールを選択または作成します。次へを選択します。
- 出力とスケジュールの設定で、詳細オプションを展開し、以下を選択します。
変更を無視し、データカタログのテーブルを更新しないでください。
すべての新規パーティションと既存パーティションをテーブルのメタデータで更新します。
変更を無視し、データカタログのテーブルを更新しないでください。
- 次へ、クローラーの作成の順に選択して、クローラー設定を保存します。
- クローラーを実行を選択します。クローラーを実行すると、パーティションがテーブルにロードされます。
詳細については、クローラーの仕組みと AWS Glue に新しいパーティションを追加するための増分クロールを参照してください。
Athena DDL ステートメントを使用してパーティションをロードする
Athena DDL ステートメントを使用してパーティションをロードするには、次の手順を実行します。
- Amazon Athena コンソールを開きます。
- クエリエディタタブで、ALTER TABLE ADD PARTITION コマンドを実行してパーティションをロードします。
関連情報
Athena クエリの実行に時間がかかるのはなぜですか?
AWS Glue ETL ジョブからデータカタログでのテーブルの作成、スキーマの更新、新しいパーティションの追加
AWS Glue の料金