计划查询
重要
Amazon Redshift 查询编辑器 v2 现在支持安排查询。我们建议使用查询编辑器 v2。有关更多信息,请参阅 使用查询编辑器 v2 计划查询。
要创建运行 SQL 语句的计划,您可以使用 Amazon Redshift 控制台上的查询编辑器。您可以创建一个计划,以便按照与您的业务需求相匹配的时间间隔运行 SQL 语句。当计划查询运行时,Amazon EventBridge 会启动查询。
创建计划以运行 SQL 语句
打开控制台和查询编辑器,如使用查询编辑器中所述。您只能将此查询编辑器用于预调配集群。
选择计划以创建运行 SQL 语句的计划。
在定义计划时,您需要提供以下信息:
用于代入运行查询所需权限的 IAM 角色。有关更多信息,请参阅 设置计划查询的权限。
Amazon Secrets Manager 或用于授权访问您的集群的临时凭证的身份验证值。有关更多信息,请参阅 对计划查询进行身份验证。
计划查询的名称和要运行的单个 SQL 语句。
计划频率和重复选项或 cron 格式的值。
或者,您可以启用 Amazon SNS 通知来监控计划查询。如果您的查询正在运行,但您没有看到 SNS 主题中发布的消息,请参阅《Amazon EventBridge 用户指南》中的我的规则正被触发,但我没有发现任何消息发布到我的 Amazon SNS 主题。
您还可以使用 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 创建和管理密钥。
- 临时凭证
-
使用此方法,提供 database 和 db-user 值。
AmazonRedshiftDataFullAccess
策略允许为redshift:GetClusterCredentials
使用名为redshift_data_api_user
权限的数据库用户 如果要使用其他数据库用户运行 SQL 语句,请向 IAM 角色添加策略以允许redshift:GetClusterCredentials
。以下示例策略允许数据库用户awsuser
和myuser
。{ "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" ] } }