View a markdown version of this page

使用长轮询减少 API 调用 - Amazon Redshift

2026 年 6 月 30 日之后,Amazon Redshift 不再支持使用 Python UDF。我们将分阶段开始执行。有关 Python 生命周期终止和迁移选项详情的更多信息,请参阅 2025 年 6 月 30 日发布的博客文章

使用长轮询减少 API 调用

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

DescribeStatementExecuteStatementBatchExecuteStatementGetStatementResultGetStatementResultV2 支持长轮询。

当操作使用 WaitTimeSeconds 来提交新语句或等待现有语句时:

  • 如果语句在等待时间内完成,则响应将包括终止状态或结果数据,具体取决于操作。

  • 如果等待时间到期时语句仍在运行,则响应将返回当前正在进行状态。

  • 如果语句在长轮询请求发出之前已经完成,则 API 会立即返回终止状态。

  • 如果省略了 WaitTimeSeconds,则保留默认的异步行为。

常见使用案例

以下是长轮询可能有用的示例:

  • 提交简短的查询并等待完成:将 ExecuteStatementWaitTimeSeconds 结合使用。当查询完成或等待时间到期时,响应会返回语句 StatusRedshiftPidHasResultSet。要获取完整的语句元数据,请调用 DescribeStatement。如果 HasResultSettrue,则调用 GetStatementResult 以提取结果。

  • 长轮询以获取状态:使用 ExecuteStatement 以提交查询,然后使用 WaitTimeSeconds 调用 DescribeStatement。查询完成后,DescribeStatement 返回完整的语句元数据,包括状态、持续时间和错误详情。

  • 长轮询以获取结果:使用 ExecuteStatement 以提交查询,然后使用 WaitTimeSeconds 调用 GetStatementResult。查询完成后,将直接返回结果数据。如果等待时间到期时查询仍在运行,则会返回 ResourceNotFoundException,表示尚无可用的结果。

  • 提交多个查询并等待整个批次完成:将 BatchExecuteStatementWaitTimeSeconds 结合使用。该调用会保持打开状态,直至所有子语句执行完毕,然后返回批次父 ID 和整体状态。

  • 为子语句提交多个查询和长轮询状态:将 DescribeStatementGetStatementResult 与子语句 ID 和 WaitTimeSeconds 结合使用。该子语句完成后立即返回,无需等待批次的其余部分。