简短描述
计划查询在许多情况下都很有用,例如运行定期报告查询或定期加载新分区。以下是在 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.确保选择从头开始创作,然后配置以下选项:
对于名称,输入函数名称。
对于 Runtime(运行时),选择一个 Python 选项。
对于角色,选择使用现有角色,然后选择您在步骤 1 中创建的 IAM 角色。
5.选择创建函数。
6.将代码粘贴到函数代码部分。以下示例使用 Python 3.7。请替换示例中的下列值:
默认: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.在导航窗格中,选择 Rules(规则),然后选择 Create rule(创建规则)。
10.输入规则的名称和描述。
11.对于定义模式,选择计划。
12.选择 Cron 表达式,然后输入 cron 表达式。
13.对于选择事件总线,选择 AWS 默认事件总线。
14.在选择目标部分,执行以下操作:
对于目标,从下拉列表中选择 ** Lambda 函数**。对于函数,从下拉列表中选择您的 Lambda 函数的名称。
15.选择创建。
如果您要计划多个查询,请注意,每个账户对 Athena API 的调用次数有配额。有关更多信息,请参阅 Per account API call quotas。
相关信息
Tutorial: Schedule AWS Lambda functions using EventBridge
Creating an Amazon EventBridge rule that runs on a schedule