次の方法で共有

分页 - Cosmos DB 中的查询语言

在 Cosmos DB 中,查询可能有多个结果页。 本文档介绍 Cosmos DB 的查询引擎用于决定是否将查询结果拆分为多个页面的条件。 可以选择使用延续令牌来管理跨多个页面的查询结果。

查询执行

有时,查询结果会拆分到多个页面上。 单独的查询执行将生成每个页面的结果。 如果单个执行中无法返回查询结果,Cosmos DB 会自动将结果拆分为多个页面。

可以通过设置 <a0/a0> 来指定查询返回的最大项数。 按请求指定, MaxItemCount 并指示查询引擎返回该数目的项数或更少。 如果不想对每个查询执行的结果数施加限制,可以设置为<

此外,查询引擎可能需要将查询结果拆分为多个页面的其他原因。 这些原因包括:

  • 容器受到限制,并且没有可用的请求单位(RU)返回更多查询结果
  • 查询执行的响应太大
  • 查询执行时间过长
  • 查询引擎在额外执行中返回结果更为高效

每个查询执行返回的项数小于或等于“MaxItemCount”。 但是,其他条件可能会限制查询可能返回的结果数。 如果多次执行同一查询,则页数可能不是常量。 例如,如果查询受到限制,则每个页面的可用结果可能更少,这意味着查询具有额外的页面。 在某些情况下,查询也可能返回一页空的结果。

处理多页结果

为了确保准确的查询结果,应在所有页面中进行。 应继续执行查询,直到没有额外的页面。

下面是使用多个页面处理查询结果的一些示例:

继续标记

在 .NET SDK 和 Java SDK 中,可以选择使用延续令牌作为查询进度的书签。 Cosmos DB 查询执行在服务器端是无状态的,可以随时使用延续令牌恢复。 对于 Python SDK,仅单分区查询支持继续标记。 分区键必须在 options 对象中指定,因为它不足以在查询本身中指定分区键。

下面是使用延续标记的一些示例:

如果查询返回延续标记,则会出现额外的查询结果。

在 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