计划查询
重要
Amazon Redshift 查询编辑器 v2 现在支持安排查询。我们建议使用查询编辑器 v2。有关更多信息,请参阅使用查询编辑器 v2 计划查询。
要创建运行 SQL 语句的计划,您可以使用 Amazon Redshift 控制台上的查询编辑器。您可以创建一个计划,以便按照与您的业务需求相匹配的时间间隔运行 SQL 语句。当计划查询运行时,Amazon EventBridge 会启动查询。
创建计划以运行 SQL 语句
打开控制台和查询编辑器,如使用查询编辑器中所述。您只能将此查询编辑器用于预调配集群。
选择 Schedule(计划)以创建运行 SQL 语句的计划。
在定义计划时,您需要提供以下信息:
用于代入运行查询所需权限的 IAM 角色。有关更多信息,请参阅设置计划查询的权限 设置在 Amazon Redshift 控制台上计划查询的权限。
Amazon Secrets Manager 或用于授权访问您的集群的临时凭证的身份验证值。有关更多信息,请参阅对计划查询进行身份验证。
计划查询的名称和要运行的单个 SQL 语句。
计划频率和重复选项或 cron 格式的值。
或者,您可以启用 Amazon SNS 通知来监控计划查询。如果您的查询正在运行,但您没有看到 SNS 主题中发布的消息,请参阅 Amazon EventBridge 用户指南中的我的规则正被触发,但我没有发现任何消息发布到我的 Amazon SNS 主题。
您还可以使用 Amazon Redshift 控制台管理和更新计划查询。根据控制台版本的不同,计划查询可能会在以下位置列出:
在集群的详细信息页面的 Schedules(计划)选项卡上。
在查询编辑器的 Scheduled queries(计划查询)选项卡中。
如果您从以下位置之一选择 Schedule name(计划名称),则可以查看和编辑计划查询的定义。
设置在 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": "awsome 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" ] } }