View a markdown version of this page

使用長輪詢減少 API 呼叫 - Amazon Redshift

Amazon Redshift 將不再支援在 2026 年 6 月 30 日之後使用 Python UDFs。我們將開始分階段強制執行。如需 Python 生命週期結束和遷移選項的詳細資訊,請參閱 2025 年 6 月 30 日發佈的部落格文章

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用長輪詢減少 API 呼叫

根據預設,資料 API 操作會傳回立即回應。如果操作是針對進行中陳述式,您必須重複輪詢,直到陳述式達到結束狀態。使用長輪詢時,WaitTimeSeconds將 設為介於 1 到 30 之間的值。API 會延遲傳回同步回應,直到陳述式完成或WaitTimeSeconds到達,以先到者為準。

DescribeStatementExecuteStatementBatchExecuteStatementGetStatementResultGetStatementResultV2 支援長輪詢。

當 操作使用 WaitTimeSeconds來提交新陳述式或等待現有陳述式時:

  • 如果陳述式在等待時間內完成,回應會根據操作包含終端機狀態或結果資料。

  • 如果陳述式在等待時間到期時仍在執行,回應會傳回目前的進行中狀態。

  • 如果陳述式在提出長輪詢請求之前已完成,API 會立即傳回終端機狀態。

  • 如果省略 WaitTimeSeconds ,則會保留預設的非同步行為。

常用案例

以下是長時間輪詢可能有用的範例:

  • 提交簡短查詢並等待完成 - ExecuteStatement搭配 使用WaitTimeSeconds。當查詢完成或等待時間過期時,回應會傳回陳述式 StatusRedshiftPidHasResultSet。若要取得完整的陳述式中繼資料,請呼叫 DescribeStatement。如果 HasResultSettrue,請呼叫 GetStatementResult來擷取結果。

  • 長輪詢狀態ExecuteStatement用於提交查詢,然後使用 呼叫 DescribeStatement WaitTimeSeconds。查詢完成時, DescribeStatement會傳回完整的陳述式中繼資料,包括狀態、持續時間和錯誤詳細資訊。

  • 長輪詢結果 — 使用 ExecuteStatement提交查詢,然後使用 呼叫 GetStatementResult WaitTimeSeconds。當查詢完成時,會直接傳回結果資料。如果查詢在等待時間過期時仍在執行,ResourceNotFoundException則會傳回 ,表示尚無結果可用。

  • 提交多個查詢並等待整個批次完成BatchExecuteStatement與 搭配使用WaitTimeSeconds。通話會保持開啟狀態,直到所有子陳述式完成,並傳回批次父系 ID 和整體狀態。

  • 提交子陳述式的多個查詢和長輪詢狀態 — 使用 DescribeStatementGetStatementResult搭配子陳述式 ID 和 WaitTimeSeconds。子陳述式一完成就會傳回 ,而不會等待批次的其餘部分。