Amazon Athena でクエリをスケジュールしたいと考えています。
簡単な説明
クエリのスケジュールは、定期的なレポートクエリの実行や定期的な間隔での新しいパーティションのロードなど、多くのシナリオで役立ちます。Athena でクエリをスケジュールする方法は以下のとおりです。
解決方法
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 コールのクォータを参照してください。
関連情報
チュートリアル: EventBridge を使用した AWS Lambda 関数のスケジュール
スケジュールに従って実行する Amazon EventBridge ルールの作成