简短描述
计划查询有许多使用案例,例如定期报告或定期加载新分区。根据您的使用案例,选择以下方法之一在 Athena 中计划查询:
- 创建 AWS Lambda 函数来计划查询,然后创建 Amazon EventBridge 规则来调度 Lambda 函数。
- 使用 AWS Step Functions 创建使用 Athena 的 ETL 管道。
- 在 Linux 计算机上,使用 crontab 来计划查询。
- 使用 AWS Glue Python Shell 作业。
解决方法
使用 Lambda 函数和 EventBridge 规则来计划 Athena 查询
您可以使用 Lambda 函数和 EventBridge 规则来计划 Athena 查询。为此,请完成以下步骤:
-
为 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。
-
打开 Lambda 控制台。
-
选择 Create function(创建函数)。
-
确保选择 Author from scratch(从头开始创作),然后配置以下选项:
在名称中,为函数输入名称。
对于 Runtime(运行时),选择一个 Python 选项。
对于 Role(角色),选择 Use an existing role(使用现有角色),然后选择您在步骤 1 中创建的 IAM 角色。
-
选择 Create function(创建函数)。
-
将代码粘贴到 Function code(函数代码)部分。以下示例使用 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
-
选择 Deploy(部署)。
-
打开 Amazon EventBridge 控制台。
-
在导航窗格中,选择 Rules(规则),然后选择 Create rule(创建规则)。
-
输入规则的名称和描述。
-
对于 Define pattern(定义模式),选择 Schedule(计划)。
-
选择 Cron expression(cron 表达式),然后输入 cron 表达式。
-
对于 Select event bus(选择事件总线),选择 AWS default event bus(AWS 默认事件总线)。
-
在 Select Targets(选择目标)部分中,执行以下操作:
对于 Target(目标),从下拉列表中选择 Lambda function(Lambda 函数)。
对于 Function(函数),从下拉列表中选择您的 Lambda 函数的名称。
-
选择 Create(创建)。
**注意:**每个账户对 Athena API 的允许调用次数都有配额。如果您想计划多个查询,请确保保持在配额范围内。有关详细信息,请参阅每个账户 API 调用配额。
使用 Step Functions 创建 ETL 管道
如果您使用 Step Functions 创建包含 Athena 的 ETL 管道,则可以使用 Step Functions 计划 Athena 查询。
在 Linux 计算机上使用 crontab
如果您使用的是 Linux 计算机,则可以使用 crontab 来计划 Athena 查询。
使用 AWS Glue Python Shell 作业
您可以使用 AWS Glue Python Shell 作业,通过 Athena boto3 API 来运行 Athena 查询。然后,为 AWS Glue 作业定义计划。
相关信息
教程: 为 AWS Lambda 函数创建 EventBridge 计划的规则
在 Amazon EventBridge 中创建按计划运行的规则