如何计划 Athena 查询?
上次更新时间:2020 年 5 月 21 日
如何在 Amazon Athena 中计划查询?
简短描述
计划查询在许多情况下都很有用,例如运行定期报告查询或定期加载新分区。您可以通过以下方法在 Athena 中计划查询:
- 使用所选的开发工具包创建 AWS Lambda 函数,以计划查询。有关 Lambda 支持的编程语言的更多信息,请参阅 AWS Lambda 常见问题。然后,创建 Amazon CloudWatch Events 规则以计划 Lambda 函数。这是“解决方案”中所述的方法。
- 如果您在 ETL 管道中使用 Athena,请使用 AWS Step Functions 创建管道并计划查询。
- 在 Linux 计算机上,使用 crontab 计划查询。
- 使用 AWS Glue Python shell 作业来通过 Athena boto3 API 运行 Athena 查询。然后,为 AWS Glue 作业定义计划。
解决方法
要使用 Lambda 函数和 CloudWatch Events 规则计划 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。替换示例中的以下值:
默认:Athena 数据库名称
SELECT * FROM default.tb:您想要计划的查询
s3://AWSDOC-EXAMPLE-BUCKET/:用于查询输出的 S3 存储桶
import time
import boto3
query = 'SELECT * FROM default.tb'
DATABASE = 'default'
output='s3://AWSDOC-EXAMPLE-BUCKET/'
def lambda_handler(event, context):
query = "SELECT * FROM default.tb"
client = boto3.client('athena')
# Execution
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': DATABASE
},
ResultConfiguration={
'OutputLocation': output,
}
)
return response
return
7. 在页面的右上角,选择保存。
8. 打开 CloudWatch 控制台。
9. 在导航窗格中,选择规则,然后选择创建规则。有关创建 CloudWatch Events 规则的更多信息,请参阅步骤 2:创建规则。
10. 在事件源部分,选择计划,然后输入一个 cron 表达式。
11. 在页面右侧的目标部分,选择添加目标。
12. 在下拉列表中,选择 Lambda 函数。
13. 在函数下拉列表中,选择 Lambda 函数的名称。
14. 在页面的右下角,选择配置详细信息。
15. 为您的 CloudWatch Events 规则输入名称和描述,然后选择创建规则。
16. 打开 Lambda 控制台,然后选择您之前创建的函数。
17. 选择添加触发器,然后选择 CloudWatch Events/EventBridge。
18. 在规则下拉列表中,选择您刚刚创建的 CloudWatch Events 规则。
19. 选择添加。
如果您要计划多个查询,请记住,每个账户对 Athena API 的调用次数都有配额。有关更多信息,请参阅每个账户的 API 调用配额。