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. [関数を作成] を選択します。
4. [最初から作成] が選択されていることを確認し、次のオプションを設定します:
[名前] に、関数の名前を入力します。
[ランタイム] で、Python オプションのいずれかを選択します。
[ロール] で **[既存のロールを使用する] **を選択し、ステップ 1 で作成した IAM ロールを選択します。
5. [関数を作成] を選択します。
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. [デプロイ] を選択します。
8. Amazon EventBridge コンソールを開きます。
9. ナビゲーションペインで、[ルール]、[ルールの作成] の順に選択します。
10. ルールの名前と説明を入力します。
11. [パターンの定義] で [スケジュール] を選択します。
12. [Cron 式] を選択し、次に [Cron 式]を入力します。
13. [イベントバスを選択] で、 AWS デフォルトイベントバスを選択します。
14. [ターゲットの選択] セクションで、次の操作を行います:
[ターゲット] で、ドロップダウンリストから ** Lambda 関数を選択します。[関数]**で、ドロップダウンリストから Lambda 関数の名前を選択します。
15. [作成] を選択します。
複数のクエリをスケジュールする場合は、アカウントごとに Athena API へのコール数にクォータがあることに注意してください。詳細については、「アカウントあたりの API コールのクォータ」を参照してください。
関連情報
チュートリアル: EventBridge を使用した AWS Lambda 関数のスケジュール
スケジュールに従って実行される Amazon EventBridge ルールの作成