適用于 NoSQL 的 Azure Cosmos DB 編頁
適用於:NoSQL
在適用于 NoSQL 的 Azure Cosmos DB 中,查詢可能會有多個頁面的結果。 本檔說明適用于 NoSQL 的 Azure Cosmos DB 查詢引擎用來決定是否要將查詢結果分割成多個頁面的準則。 您可以選擇性地使用接續權杖來管理跨越多個頁面的查詢結果。
查詢執行
有時候會分割多個頁面的查詢結果。 個別的查詢執行會產生每個頁面的結果。 當單一執行中無法傳回查詢結果時,適用于 NoSQL 的 Azure Cosmos DB 會自動將結果分割成多個頁面。
您可以藉由設定 MaxItemCount
來指定查詢所傳回的項目數上限。 MaxItemCount
是針對每個要求所指定,並告知查詢引擎傳回該數量的項目或較少的項目。 如果您不想限制每個查詢執行的結果數目,您可以將 MaxItemCount
設定為 -1
。
此外,查詢引擎還有其他原因可能需要將查詢結果分割成多個頁面。 這些原因包括:
- 容器已進行節流,而且沒有可用的 RU 可傳回更多查詢結果
- 查詢執行的回應太大
- 查詢執行的時間太長
- 查詢引擎傳回額外執行的結果更有效率
每個查詢執行傳回的專案數目小於或等於 MaxItemCount
。 不過,其他準則可能會限制查詢可能傳回的結果數目。 如果您多次執行相同的查詢,則頁面數目可能不會是常數。 例如,如果查詢已節流,則每個頁面的可用結果可能較少,這表示查詢有額外的頁面。 在某些情況下,您的查詢也可能傳回空白的結果頁面。
處理多個結果頁面
為了確保正確的查詢結果,您應該進行所有頁面的進度。 您應該繼續執行查詢,直到沒有額外的頁面為止。
以下是使用多個頁面處理查詢結果的一些範例:
接續權杖
在 .NET SDK 和 JAVA SDK 中,您可以選擇性地使用接續權杖作為查詢進度的書簽。 適用于 NoSQL 的 Azure Cosmos DB 查詢執行在伺服器端是無狀態的,而且可以隨時使用接續權杖繼續執行。 針對 Python SDK,只有單一分割區查詢才支援接續權杖。 您必須在選項物件中指定分割區索引鍵,因為僅在查詢本身中指定是不夠的。
以下是使用接續權杖的一些範例:
如果查詢傳回接續權杖,則會有額外的查詢結果。
在適用于 NoSQL 的 Azure Cosmos DB REST API 中,您可以使用 標頭來管理接續權杖 x-ms-continuation
。 如同使用 .NET 或 JAVA SDK 進行查詢時,如果 x-ms-continuation
回應標頭不是空的,表示查詢會有額外的結果。
只要您使用相同的 SDK 版本,接續權杖永遠不會過期。 您可以選擇性地限制接續權杖的大小。 無論您容器中的資料量或實體分割區數目為何,查詢都會傳回單一的接續權杖。
您無法針對 GROUP BY 或 DISTINCT 的查詢使用接續權杖,因為這些查詢需要儲存大量的狀態。 針對使用 DISTINCT
的查詢,您可以在將 ORDER BY
新增至查詢時使用接續標記。
以下是具有 DISTINCT
且可使用接續權杖的查詢範例:
SELECT DISTINCT VALUE
e.name
FROM
employees e
ORDER BY
e.name