Amazon Athena クエリのスケジュールを設定するにはどうすればよいですか?
最終更新日: 2022 年 12 月 20 日
Amazon Athena でクエリをスケジュールしたいと考えています。
簡単な説明
クエリのスケジュールは、定期的なレポートクエリの実行や定期的な間隔での新しいパーティションのロードなど、多くのシナリオで役立ちます。Athena でクエリをスケジュールする方法は以下のとおりです。
- 任意の SDK を使用して AWS Lambda 関数を作成し、クエリをスケジュールします。Lambda がサポートするプログラミング言語の詳細については、AWS Lambda のよくある質問を参照してください。その後、Amazon EventBridge ルールを作成して、Lambda 関数をスケジュールします。これは、「解決方法」で説明されている方法です。
- ETL パイプラインで Athena を使用している場合は、AWS Step Functions を使用してパイプラインを作成し、クエリをスケジュールします。
- Linux マシンでは、crontab を使用してクエリをスケジュールします。
- AWS Glue Python シェルジョブを使用し、Athena boto3 API を使用して Athena クエリを実行します。次に、AWS Glue ジョブのスケジュールを定義します。
解決方法
Lambda 関数と EventBridge ルールを使用して Athena クエリをスケジュールするには次の手順を実行してください。
1. Lambda 用の AWS Identity and Access Management (IAM) サービスロールを作成します。次に、Athena、Amazon Simple Storage Service (Amazon S3)、および Amazon CloudWatch Logs へのアクセスを許可するポリシーをアタッチします。例えば、AmazonAthenaFullAccess と CloudWatchLogsFullAccess をロールに追加できます。AmazonAthenaFullAccess は Athena へのフルアクセスを許可し、Amazon S3 の基本的なアクセス許可を含みます。CloudWatchLogsFullAccess は CloudWatch Logs へのフルアクセスを許可します。
2. Lambda コンソールを開きます。
3. [Create function] を選択します。
4. [一から作成] が選択されていることを確認し、次のオプションを設定します。
[名前] に関数の名前を入力します。
[ランタイム] で、Python オプションのいずれかを選択します。
[ロール] で、[既存のロールを使用する] を選択し、ステップ 1 で作成した IAM ロールを選択します。
5. [Create function (関数を作成)] を選択します。
6. [関数コード] セクションにコードを貼り付けます。次の例では Python 3.7 を使用します。例にある次の値を置き換えます。
default: Athena データベース名
SELECT*FROM default.tb: スケジュールするクエリ
s3://AWSDOC-EXAMPLE-BUCKET/: クエリ出力のための S3 バケット
import boto3
# Query string to execute
query = 'SELECT * FROM database.tb'
# Database to execute the query against
DATABASE = 'database'
# Output location for query results
output='s3://OUTPUTBUCKET/'
def lambda_handler(event, context):
# Initiate the Boto3 Client
client = boto3.client('athena')
# Start the query execution
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': DATABASE
},
ResultConfiguration={
'OutputLocation': output
}
)
# Return response after starting the query execution
return response
7. [Deploy] を選択します。
8. Amazon EventBridge コンソールを開きます。
9. ナビゲーションペインで [Rules] (ルール) を選択し、続いて [Create rule] (ルールを作成) を選択します。
10. ルールの名前と説明を入力します。
11. [Define pattern] (パターンを定義) で、[Schedule] (スケジュール) を選択します。
12. [Cron expression] (Cron 式) を選択し、cron 式を入力します。
13. [Select event bus] (イベントバスを選択) で、[AWS default event bus] (AWS デフォルトイベントバス) を選択します。
14. [Select Targets] (ターゲットを選択) セクションで、次の操作を実行します。
[Target] (ターゲット) で、ドロップダウンリストから [Lambda function] (Lambda 関数) を選択します。[Function] (関数) で、ドロップダウンリストから Lambda 関数の名前を選択します。
15. [Create] (作成) を選択します。
複数のクエリをスケジュールする場合は、アカウントごとに Athena API へのコール数にクォータがあることに注意してください。詳細については、アカウントあたりの API コールのクォータを参照してください。