如何计划 Amazon Athena 查询?

上次更新时间:2021 年 12 月 20 日

我想在 Amazon Athena 中计划查询

简短描述

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

解决方法

要使用 Lambda 函数和 EventBridge 规则计划 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。替换示例中的以下值:

default(默认):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.    选择 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 调用配额