2026 年 6 月 30 日之后,Amazon Redshift 不再支持使用 Python UDF。我们将分阶段开始执行。有关 Python 生命周期终止和迁移选项详情的更多信息,请参阅 2025 年 6 月 30 日发布的博客文章
使用长轮询减少 API 调用
默认情况下,数据 API 操作会立即返回响应。如果操作针对正在进行的语句,则必须反复轮询,直到该语句达到终止状态。使用长轮询时,将 WaitTimeSeconds 设置为介于 1 和 30 之间的值。API 将延迟返回同步响应,直到语句完成或达到 WaitTimeSeconds(以较早者为准)。
DescribeStatement、ExecuteStatement、BatchExecuteStatement、GetStatementResult 和 GetStatementResultV2 支持长轮询。
当操作使用 WaitTimeSeconds 来提交新语句或等待现有语句时:
-
如果语句在等待时间内完成,则响应将包括终止状态或结果数据,具体取决于操作。
-
如果等待时间到期时语句仍在运行,则响应将返回当前正在进行状态。
-
如果语句在长轮询请求发出之前已经完成,则 API 会立即返回终止状态。
-
如果省略了
WaitTimeSeconds,则保留默认的异步行为。
常见使用案例
以下是长轮询可能有用的示例:
-
提交简短的查询并等待完成:将
ExecuteStatement与WaitTimeSeconds结合使用。当查询完成或等待时间到期时,响应会返回语句Status、RedshiftPid和HasResultSet。要获取完整的语句元数据,请调用DescribeStatement。如果HasResultSet为true,则调用GetStatementResult以提取结果。 -
长轮询以获取状态:使用
ExecuteStatement以提交查询,然后使用WaitTimeSeconds调用DescribeStatement。查询完成后,DescribeStatement返回完整的语句元数据,包括状态、持续时间和错误详情。 -
长轮询以获取结果:使用
ExecuteStatement以提交查询,然后使用WaitTimeSeconds调用GetStatementResult。查询完成后,将直接返回结果数据。如果等待时间到期时查询仍在运行,则会返回ResourceNotFoundException,表示尚无可用的结果。 -
提交多个查询并等待整个批次完成:将
BatchExecuteStatement与WaitTimeSeconds结合使用。该调用会保持打开状态,直至所有子语句执行完毕,然后返回批次父 ID 和整体状态。 -
为子语句提交多个查询和长轮询状态:将
DescribeStatement或GetStatementResult与子语句 ID 和WaitTimeSeconds结合使用。该子语句完成后立即返回,无需等待批次的其余部分。