计划查询 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

计划查询

重要

Amazon Redshift 查询编辑器 v2 现在支持安排查询。我们建议使用查询编辑器 v2。有关更多信息,请参阅 使用查询编辑器 v2 计划查询

要创建运行 SQL 语句的计划,您可以使用 Amazon Redshift 控制台上的查询编辑器。您可以创建一个计划,以便按照与您的业务需求相匹配的时间间隔运行 SQL 语句。当计划查询运行时,Amazon EventBridge 会启动查询。

创建计划以运行 SQL 语句
  1. 打开控制台和查询编辑器,如使用查询编辑器中所述。您只能将此查询编辑器用于预调配集群。

  2. 选择计划以创建运行 SQL 语句的计划。

    在定义计划时,您需要提供以下信息:

您还可以使用 Amazon Redshift 控制台管理和更新计划查询。根据控制台版本的不同,计划查询可能会在以下位置列出:

  • 在集群的详细信息页面的计划选项卡上。

  • 在查询编辑器的计划查询选项卡中。

如果您从以下位置之一选择计划名称,则可以查看和编辑计划查询的定义。

设置在 Amazon Redshift 控制台上计划查询的权限

要计划查询,定义计划的 Amazon Identity and Access Management (IAM) 用户以及与计划关联的 IAM 角色必须按如下方式进行配置。

对于登录 Amazon Redshift 控制台的 IAM 用户,请执行以下操作:

  • AmazonEventBridgeFullAccess Amazon 托管式策略附加到 IAM 角色。

  • 附加一个策略,该策略具有您在定义计划 SQL 语句时指定的 IAM 角色的 sts:AssumeRole 权限。

    以下示例显示了代入指定 IAM 角色的策略。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeIAMRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::account-id:role/sql-statement-iam-role" } ] }

对于您指定的使调度程序能够运行查询的 IAM 角色,请执行以下操作:

  • 确保此 IAM 角色指定了 EventBridge 服务委托人 (events.amazonaws.com)。以下是示例信任关系。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

    有关如何为 EventBridge 事件创建 IAM 角色的更多信息,请参阅使用 Amazon EventBridge 调度程序所需的权限

  • AmazonRedshiftDataFullAccess Amazon 托管式策略附加到 IAM 角色。

  • 要允许用户查看计划历史记录,请编辑 IAM 角色以添加 sts:AssumeRole 权限。

以下是 IAM 角色中的信任策略示例。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "events.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }

对计划查询进行身份验证

当您计划查询时,在查询 SQL 运行时使用下列身份验证方法之一。每种方法都需要来自 Amazon Redshift 控制台的不同输入组合。

Amazon Secrets Manager

使用此方法,为存储在 Amazon Secrets Manager 中的 secret-arn 提供一个密钥值。此密钥包含用于连接到数据库的凭证。密钥必须使用键 RedshiftDataFullAccess 进行标记。

有关最低权限的更多信息,请参阅《Amazon Secrets Manager 用户指南》中的使用 Amazon Secrets Manager 创建和管理密钥

临时凭证

使用此方法,提供 databasedb-user 值。

AmazonRedshiftDataFullAccess 策略允许为 redshift:GetClusterCredentials 使用名为 redshift_data_api_user 权限的数据库用户 如果要使用其他数据库用户运行 SQL 语句,请向 IAM 角色添加策略以允许 redshift:GetClusterCredentials。以下示例策略允许数据库用户 awsusermyuser

{ "Version": "2012-10-17", "Statement": [ { "Sid": "UseTemporaryCredentialsForAllDbUsers", "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": [ "arn:aws:redshift:*:*:dbuser:*/awsuser", "arn:aws:redshift:*:*:dbuser:*/myuser" ] } ] }

创建一个在查询完成时运行的 Amazon EventBridge 规则

您可以创建事件规则,以在查询结束时发送通知。有关使用 Amazon EventBridge 控制台的过程,请参阅《Amazon EventBridge 用户指南》中的创建 Amazon EventBridge 规则以对事件做出反应。有关更多信息,请参阅《Amazon EventBridge 用户指南》Amazon EventBridge 事件模式

例如,在查询处于 FINISHED 状态时发送以下示例事件。

{ "version": "0", "id": "6a7e8feb-b491-4cf7-a9f1-bf3703467718", "detail-type": "Redshift Data Statement Status Change", "source": "aws.redshift-data", "account": "123456789012", "time": "2020-12-22T17:00:00Z", "region": "us-west-1", "resources": [ "arn:aws:redshift:us-east-2:123456789:cluster:t1" ], "detail": { "statementId": "01bdaca2-8967-4e34-ae3f-41d9728d5644", "clusterId": "test-dataapi", "statementName": "awesome query", "state": "FINISHED", "pages": 5, "expireAt": "2020-12-22T18:43:48Z", "principal": "arn:aws:sts::123456789012:assumed-role/any", "queryId": 123456 } }

您可以创建事件模式规则来筛选事件。

{ "source": [ "aws.redshift-data" ], "detail-type": [ "Redshift Data Statement Status Change" ], "detail": { "state": [ "FINISHED" ] } }