Amazon Athena でクエリを実行したところ、「クエリタイムアウト」というエラーメッセージが表示されて失敗しました。
DML クエリのタイムアウト制限を超えると、クエリのタイムアウトエラーや、実行が遅いクエリが発生する場合があります。
タイムアウトエラーを回避するには、以下のベストプラクティスに従ってクエリを最適化します。
クエリの実行時間を短縮するために Athena で実行できる手順を次に示します。
Athena から Amazon QuickSight SPICE にデータをインポートすると、DML クエリが最大実行時間に達したことが原因で、クエリタイムアウトエラーが発生することがあります。
この問題の解決策を次に示します。
サービスクォータの詳細とクォータの引き上げをリクエストする方法については、「サービスクォータ」を参照してください。
タイムアウトして失敗したクエリの通知を受け取るには、Amazon CloudWatch イベントルールを使用してイベントをキャプチャします。次に、Amazon Simple Notification Service (Amazon SNS) を使用して通知を設定します。
手順については、「Athena クエリタイムアウトの通知を生成する方法を教えてください」を参照してください。
Amazon Simple Storage Service (Amazon S3) アクセスログのクエリを実行していて、クエリがタイムアウトした場合は、S3 データを分割します。AWS Glue ETL ジョブを使用して Amazon S3 データをパーティション分割します。次に、限られたパーティションで Athena クエリを実行します。
手順については、「パーティション化された Amazon S3 アクセスログを使用して Athena クエリのタイムアウトを防ぐ方法を教えてください」を参照してください。
Athena を使用して AWS CloudTrail データをクエリする場合に、クエリの実行に時間がかかったり、タイムアウトしたりすることがあります。これは、CloudTrail テーブルを分割してクエリの実行時間を短縮した場合でも、CloudTrail ログのサイズが時間の経過とともに大きくなる可能性があるためです。
パーティションプロジェクションを使用して CloudTrail テーブルを手動で作成します。これにより、Athena は CloudTrail テーブルの値を動的に計算できるため、クエリの実行時間を短縮できます。パーティションプロジェクションでは、パーティションの値と場所は設定を元に計算されるため、パーティションを管理する必要はありません。
手順については、「パーティションプロジェクションを使用して Athena クエリを行うために、CloudTrail テーブルを作成する方法を教えてください」を参照してください。
A CREATE TABLE AS SELECT (CTAS) クエリは、別のクエリでの SELECT ステートメントの結果から、Athena に新しいテーブルを作成します。CTAS はクエリ結果からテーブルを 1 ステップで作成するため、未処理のデータセットでの作業が簡単になります。また、CTAS クエリではクエリのパフォーマンスが向上するため、クエリコストを削減できます。
例については、「CTAS クエリの例」を参照してください。
詳細については、「Athena で CTAS クエリを実行するときにファイルの数またはサイズを設定する方法を教えてください」を参照してください。
Athena で複雑なクエリを行うには、EXPLAIN および EXPLAIN ANALYZE を使用します。EXPLAIN ステートメントを使用すると、SQL ステートメントを精緻化することでクエリを最適化し、パーティションプルーニングを検証できます。
EXPLAIN および EXPLAIN ANALYZE ステートメントに関する考慮事項と制限事項を必ず確認してください。
詳細については、「EXPLAIN ステートメントの例」を参照してください。
Amazon Athena のパフォーマンスチューニングに関するトップ 10 ヒント
Amazon Athena でのクエリの結果を別のクエリで使用する方法を教えてください