

 2026 年 6 月 30 日之后，Amazon Redshift 不再支持使用 Python UDF。我们将分阶段开始执行。有关 Python 生命周期终止和迁移选项详情的更多信息，请参阅 2025 年 6 月 30 日发布的[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 使用长轮询减少 API 调用
<a name="data-api-calling-considerations-long-polling"></a>

默认情况下，数据 API 操作会立即返回响应。如果操作针对正在进行的语句，则必须反复轮询，直到该语句达到终止状态。使用长轮询时，将 `WaitTimeSeconds` 设置为介于 1 和 30 之间的值。API 将延迟返回同步响应，直到语句完成或达到 `WaitTimeSeconds`（以较早者为准）。

[DescribeStatement](data-api-calling-cli-describe-statement.md)、[ExecuteStatement](pass-sql-statements.md#data-api-calling-cli-execute-statement)、[BatchExecuteStatement](pass-sql-statements.md#data-api-calling-cli-batch-execute-statement)、[GetStatementResult](data-api-calling-cli-get-statement-result.md) 和 [GetStatementResultV2](data-api-calling-cli-get-statement-result.md) 支持长轮询。

当操作使用 `WaitTimeSeconds` 来提交新语句或等待现有语句时：
+ 如果语句在等待时间内**完成**，则响应将包括终止状态或结果数据，具体取决于操作。
+ 如果等待时间到期时语句**仍在运行**，则响应将返回当前正在进行状态。
+ 如果语句在长轮询请求发出之前**已经完成**，则 API 会立即返回终止状态。
+ 如果**省略了** `WaitTimeSeconds`，则保留默认的异步行为。

## 常见使用案例
<a name="data-api-long-polling-which-api"></a>

以下是长轮询可能有用的示例：
+ **提交简短的查询并等待完成**：将 `ExecuteStatement` 与 `WaitTimeSeconds` 结合使用。当查询完成或等待时间到期时，响应会返回语句 `Status`、`RedshiftPid` 和 `HasResultSet`。要获取完整的语句元数据，请调用 `DescribeStatement`。如果 `HasResultSet` 为 `true`，则调用 `GetStatementResult` 以提取结果。
+ **长轮询以获取状态**：使用 `ExecuteStatement` 以提交查询，然后使用 `WaitTimeSeconds` 调用 `DescribeStatement`。查询完成后，`DescribeStatement` 返回完整的语句元数据，包括状态、持续时间和错误详情。
+ **长轮询以获取结果**：使用 `ExecuteStatement` 以提交查询，然后使用 `WaitTimeSeconds` 调用 `GetStatementResult`。查询完成后，将直接返回结果数据。如果等待时间到期时查询仍在运行，则会返回 `ResourceNotFoundException`，表示尚无可用的结果。
+ **提交多个查询并等待整个批次完成**：将 `BatchExecuteStatement` 与 `WaitTimeSeconds` 结合使用。该调用会保持打开状态，直至所有子语句执行完毕，然后返回批次父 ID 和整体状态。
+ **为子语句提交多个查询和长轮询状态**：将 `DescribeStatement` 或 `GetStatementResult` 与子语句 ID 和 `WaitTimeSeconds` 结合使用。该子语句完成后立即返回，无需等待批次的其余部分。