

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 使用 Amazon EventBridge 计划 Amazon Redshift 数据 API 操作
<a name="data-api-calling-event-bridge"></a>

您可以创建规则来匹配选定的事件，并将它们路由到目标以采取操作。此外，您还可以使用规则对预定的计划采取操作。有关更多信息，请参阅 [Amazon EventBridge 用户指南](https://docs.amazonaws.cn/eventbridge/latest/userguide/)。

要使用 EventBridge 计划数据 API 操作，关联的 IAM 角色必须信任 CloudWatch Events (events.amazonaws.com) 的委托人。此角色应附加相当于托管式策略 `AmazonEventBridgeFullAccess` 的策略。它还应具有 `AmazonRedshiftDataFullAccess` 策略权限，这些权限由数据 API 管理。您可以在 IAM 控制台上创建具有这些权限的 IAM 角色。在 IAM 控制台上创建角色时，为 CloudWatch Events 选择 Amazon 服务可信任实体。在 EventBridge 目标的 `RoleArn` JSON 值中指定 IAM 角色。有关创建 IAM 角色的更多信息，请参阅《IAM 用户指南》**中的[为 Amazon 服务创建角色（控制台）](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console)。

您在 Amazon EventBridge 中创建的规则的 `name` 必须与 `RedshiftDataParameters` 中的 `StatementName` 相匹配。

以下示例显示了使用单个或多个 SQL 语句创建 EventBridge 规则的变体，并将 Amazon Redshift 集群或 Amazon Redshift Serverless 工作组作为数据仓库。

## 对集群执行包含单个 SQL 语句的调用
<a name="data-api-calling-event-bridge-sql-cluster"></a>

以下示例使用 Amazon CLI 创建 EventBridge 规则，用于对 Amazon Redshift 集群运行 SQL 语句。

```
aws events put-rule 
--name test-redshift-cluster-data 
--schedule-expression "rate(1 minute)"
```

然后创建一个 EventBridge 目标，以按照规则中指定的计划运行。

```
aws events put-targets 
--cli-input-json file://data.json
```

输入 data.json 文件如下。`Sql` JSON 键表示只有一个 SQL 语句。`Arn` JSON 值包含集群标识符。`RoleArn` JSON 值包含用于运行 SQL 的 IAM 角色，如前所述。

```
{
    "Rule": "test-redshift-cluster-data",
    "EventBusName": "default",
    "Targets": [
        {
            "Id": "2",
            "Arn": "arn:aws:redshift:us-east-1:123456789012:cluster:mycluster",
            "RoleArn": "arn:aws:iam::123456789012:role/Administrator",
            "RedshiftDataParameters": {
                "Database": "dev",
                "DbUser": "root",
                "Sql": "select 1;",
                "StatementName": "test-redshift-cluster-data",
                "WithEvent": true
            }
        }
    ]
}
```

## 使用单个 SQL 语句和工作组进行调用
<a name="data-api-calling-event-bridge-sql-workgroup"></a>

以下示例使用 Amazon CLI 创建 EventBridge 规则，用于对 Amazon Redshift Serverless 工作组运行一个 SQL 语句。

```
aws events put-rule 
--name  test-redshift-serverless-workgroup-data 
--schedule-expression "rate(1 minute)"
```

然后创建一个 EventBridge 目标，以按照规则中指定的计划运行。

```
aws events put-targets 
--cli-input-json file://data.json
```

输入 data.json 文件如下。`Sql` JSON 键表示只有一个 SQL 语句。`Arn` JSON 值包含工作组名称。`RoleArn` JSON 值包含用于运行 SQL 的 IAM 角色，如前所述。

```
{
    "Rule": "test-redshift-serverless-workgroup-data", 
    "EventBusName": "default", 
    "Targets": [ 
        {
            "Id": "2",
            "Arn": "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "RoleArn": "arn:aws:iam::123456789012:role/Administrator", 
            "RedshiftDataParameters": {
                "Database": "dev",
                "Sql": "select 1;",
                "StatementName": "test-redshift-serverless-workgroup-data", 
                "WithEvent": true 
            } 
        } 
    ] 
}
```

## 对集群执行包含多个 SQL 语句的调用
<a name="data-api-calling-event-bridge-sqls-cluster"></a>

以下示例使用 Amazon CLI 创建 EventBridge 规则，用于对 Amazon Redshift 集群运行多个 SQL 语句。

```
aws events put-rule 
--name  test-redshift-cluster-data 
--schedule-expression "rate(1 minute)"
```

然后创建一个 EventBridge 目标，以按照规则中指定的计划运行。

```
aws events put-targets 
--cli-input-json file://data.json
```

输入 data.json 文件如下。`Sqls` JSON 键表示有多个 SQL 语句。`Arn` JSON 值包含集群标识符。`RoleArn` JSON 值包含用于运行 SQL 的 IAM 角色，如前所述。

```
{
    "Rule": "test-redshift-cluster-data", 
    "EventBusName": "default", 
    "Targets": [ 
        {
            "Id": "2",
            "Arn": "arn:aws:redshift:us-east-1:123456789012:cluster:mycluster",
            "RoleArn": "arn:aws:iam::123456789012:role/Administrator", 
            "RedshiftDataParameters": {
                "Database": "dev",
                "Sqls": ["select 1;", "select 2;", "select 3;"],
                "StatementName": "test-redshift-cluster-data", 
                "WithEvent": true 
            } 
        } 
    ] 
}
```

## 使用多个 SQL 语句和工作组进行调用
<a name="data-api-calling-event-bridge-sqls-workgroup"></a>

以下示例使用 Amazon CLI 创建 EventBridge 规则，用于对 Amazon Redshift Serverless 工作组运行多个 SQL 语句。

```
aws events put-rule 
--name  test-redshift-serverless-workgroup-data 
--schedule-expression "rate(1 minute)"
```

然后创建一个 EventBridge 目标，以按照规则中指定的计划运行。

```
aws events put-targets 
--cli-input-json file://data.json
```

输入 data.json 文件如下。`Sqls` JSON 键表示有多个 SQL 语句。`Arn` JSON 值包含工作组名称。`RoleArn` JSON 值包含用于运行 SQL 的 IAM 角色，如前所述。

```
{
    "Rule": "test-redshift-serverless-workgroup-data", 
    "EventBusName": "default", 
    "Targets": [ 
        {
            "Id": "2",
            "Arn": "arn:aws:redshift-serverless:us-east-1:123456789012:workgroup/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "RoleArn": "arn:aws:iam::123456789012:role/Administrator", 
            "RedshiftDataParameters": {
                "Database": "dev",
                "Sqls": ["select 1;", "select 2;", "select 3;"],
                "StatementName": "test-redshift-serverless-workgroup-data", 
                "WithEvent": true 
            } 
        } 
    ] 
}
```