如何计划 Athena 查询?

上次更新时间:2020 年 5 月 21 日

如何在 Amazon Athena 中计划查询?

简短描述

计划查询在许多情况下都很有用,例如运行定期报告查询或定期加载新分区。您可以通过以下方法在 Athena 中计划查询:

解决方法

要使用 Lambda 函数和 CloudWatch Events 规则计划 Athena 查询,请执行以下操作:

1.    为 Lambda 创建 AWS Identity and Access Management (IAM) 服务角色。然后,附加一个允许访问 Athena、Amazon Simple Storage Service (Amazon S3) 和 Amazon CloudWatch Logs 的策略。例如,您可以为角色添加 AmazonAthenaFullAccessCloudWatchLogsFullAccess。 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 调用配额