

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

# 设置查询队列
<a name="serverless-workgroup-query-queues"></a>

Amazon Redshift Serverless 支持基于队列的查询资源管理。您可以为不同的工作负载创建带有自定义监控规则的专用查询队列。此功能提供对资源使用情况的精细控制。

查询监控规则（QMR）仅适用于 Redshift Serverless 工作组级别，并一致地影响在该工作组中运行的所有查询。基于队列的方法支持您创建具有不同监控规则的队列。您可以将这些队列分配给特定的用户角色和查询组。每个队列独立运行，而规则仅影响该队列中的查询。

队列可让您设置基于指标的谓词和自动响应。例如，您可以配置规则，以自动中止超过时间限制或消耗过多资源的查询。

## 注意事项
<a name="serverless-workgroup-query-queues-considerations"></a>

使用无服务器队列时，请注意以下事项：
+ Redshift 无服务器队列不支持在 Amazon Redshift 预置集群中使用的以下工作负载管理（WLM）配置键：`max_execution_time`、`short_query_queue`、`auto_wlm`、`concurrency_scaling`、`priority`、`queue_type`、`query_concurrency`、`memory_percent_to_use`、`user_group`、`user_group_wild_card`。

  此外，无服务器不支持 hop、change\$1query\$1priority 操作。
+ Amazon Redshift Serverless 不支持 hop 操作（在队列之间移动查询）。
+ 仅 Amazon Redshift 预置集群支持队列优先级。
+ Amazon Redshift Serverless 会自动管理扩展和资源分配以实现最佳性能，因此您无需手动配置队列优先级。

## 设置查询队列
<a name="serverless-workgroup-query-queues-setup"></a>

您可以使用 AWS 管理控制台、AWS CLI 或 Redshift Serverless API 在“限制”选项卡下为无服务器工作组创建队列。

------
#### [ Console ]

按照以下步骤为无服务器工作组创建队列。

1. 导航到 Redshift Serverless 工作组。

1. 选择“限制”选项卡。

1. 在**查询队列**下，选择**启用队列**。
**重要**  
启用查询队列是一项永久性更改。启用后，您将无法恢复到无队列监控。

1. 使用以下参数配置队列：

   **队列级别参数**
   + `name`：队列标识符（必需、唯一、非空）
   + `user_role`：用户角色数组（可选）
   + `query_group`：查询组数组（可选）
   + `query_group_wild_card`：0 或 1 以启用通配符匹配（可选）
   + `user_group_wild_card`：0 或 1 以启用通配符匹配（可选）
   + `rules`：监控规则数组（可选）

   **规则级别参数**
   + `rule_name`：唯一标识符，最多 32 个字符（必需）
   + `predicate`：条件数组，1-3 个谓词（必需）
   + `action`：“abort”或“log”（必需）

   **谓词级别参数**
   + `metric_name`：要监控的指标（必需）
   + `operator`：“=”、“<”或“>”（必需）
   + `value`：数字阈值（必需）

   **限制**
   + 最多 8 个队列
   + 所有队列中最多 25 条规则
   + 每条规则最多 3 个谓词
   + 规则名称必须全局唯一

**示例配置**

三个队列示例：一个用于超时时间较短的控制面板查询，一个用于超时时间较长的 ETL 查询，以及一个管理员队列：

```
[
  {
    "name": "dashboard",
    "user_role": ["analyst", "viewer"],
    "query_group": ["reporting"],
    "query_group_wild_card": 1,
    "rules": [
      {
        "rule_name": "short_timeout",
        "predicate": [
          {
            "metric_name": "query_execution_time",
            "operator": ">",
            "value": 60
          }
        ],
        "action": "abort"
      }
    ]
  },
  {
    "name": "ETL",
    "user_role": ["data_scientist"],
    "query_group": ["analytics", "ml"],
    "rules": [
      {
        "rule_name": "long_timeout",
        "predicate": [
          {
            "metric_name": "query_execution_time",
            "operator": ">",
            "value": 3600
          }
        ],
        "action": "log"
      },
      {
        "rule_name": "memory_limit",
        "predicate": [
          {
            "metric_name": "query_temp_blocks_to_disk",
            "operator": ">",
            "value": 100000
          }
        ],
        "action": "abort"
      }
    ]
  },
  {
    "name": "admin_queue",
    "user_role": ["admin"],
    "query_group": ["admin"]
  }
]
```

在本示例中：
+ 如果控制面板查询运行时间超过 60 秒，则会中止
+ 如果 ETL 查询运行时间超过一个小时，则会记录下来
+ 管理员队列没有任何资源限制

------
#### [ CLI ]

您可以将 CreateWorkgroup 或 UpdateWorkgroup API 与 `wlm_json_configuration` 配置参数结合使用来以 json 格式指定队列，从而管理队列。

```
aws redshift-serverless create-workgroup \
  --workgroup-name test-workgroup \
  --namespace-name test-namespace \
  --config-parameters '[{"parameterKey": "wlm_json_configuration", "parameterValue": "[{\"name\":\"dashboard\",\"user_role\":[\"analyst\",\"viewer\"],\"query_group\":[\"reporting\"],\"query_group_wild_card\":1,\"rules\":[{\"rule_name\":\"short_timeout\",\"predicate\":[{\"metric_name\":\"query_execution_time\",\"operator\":\">\",\"value\":60}],\"action\":\"abort\"}]},{\"name\":\"ETL\",\"user_role\":[\"data_scientist\"],\"query_group\":[\"analytics\",\"ml\"],\"rules\":[{\"rule_name\":\"long_timeout\",\"predicate\":[{\"metric_name\":\"query_execution_time\",\"operator\":\">\",\"value\":3600}],\"action\":\"log\"},{\"rule_name\":\"memory_limit\",\"predicate\":[{\"metric_name\":\"query_temp_blocks_to_disk\",\"operator\":\">\",\"value\":100000}],\"action\":\"abort\"}]},{\"name\":\"admin_queue\",\"user_role\":[\"admin\"],\"query_group\":[\"admin\"]}]"}]'
```

------

## 最佳实践
<a name="serverless-workgroup-query-queues-best-practices"></a>

使用无服务器队列时，请记住以下最佳实践。
+ 对具有不同限制要求（例如 ETL、报告或临时分析）的工作负载使用单独的队列。
+ 从简单的阈值开始，然后根据查询行为和使用模式进行调整。您可以使用[查询监控规则的系统表和视图](https://docs.aws.amazon.com/redshift/latest/dg/cm-c-wlm-query-monitoring-rules.html#cm-c-wlm-qmr-tables-and-views)中记录的表和视图来监控查询使用模式。