Разбиение на страницы — язык запросов в Cosmos DB (в Azure и Fabric)

В Cosmos DB (в Azure и Fabric) запросы могут содержать несколько страниц результатов. В этом документе описываются критерии, которые обработчик запросов Cosmos DB использует для определения того, следует ли разделить результаты запроса на несколько страниц. При необходимости можно использовать маркеры продолжения для управления результатами запроса, охватывающими несколько страниц.

Выполнение запросов

Иногда результаты запроса разделяются на несколько страниц. Отдельное выполнение запроса создает результаты каждой страницы. Если результаты запроса не могут быть возвращены в одном выполнении, Cosmos DB автоматически разбивает результаты на несколько страниц.

Максимальное количество элементов, возвращаемых запросом, можно указать.MaxItemCount Он MaxItemCount указан для каждого запроса и сообщает обработчику запросов возвращать это количество элементов или меньше. Можно задать MaxItemCount-1 значение, если вы не хотите поместить ограничение на количество результатов для каждого выполнения запроса.

Кроме того, есть и другие причины, по которым обработчик запросов может потребоваться разделить результаты запроса на несколько страниц. Ниже приведены следующие причины:

  • Контейнер был регулированием, и не было доступных единиц запросов (ЕЗ) для возврата дополнительных результатов запроса
  • Ответ выполнения запроса был слишком большим
  • Время выполнения запроса было слишком длинным
  • Это было более эффективным для обработчика запросов, чтобы возвращать результаты в дополнительных выполнениях

Количество возвращаемых элементов для каждого выполнения запроса меньше или равно maxItemCount. Однако возможно, что другие критерии ограничивают количество результатов, возвращаемых запросом. Если один и тот же запрос выполняется несколько раз, количество страниц может не быть константой. Например, если запрос регулируется, на страницу может быть меньше доступных результатов, что означает, что запрос содержит дополнительные страницы. В некоторых случаях запрос также может вернуть пустую страницу результатов.

Обработка нескольких страниц результатов

Чтобы обеспечить точные результаты запроса, необходимо выполнить все страницы. Вы должны продолжать выполнять запросы, пока нет дополнительных страниц.

Ниже приведены некоторые примеры обработки результатов из запросов с несколькими страницами:

Маркеры продолжения

В пакете SDK .NET и пакете SDK Java можно также использовать маркеры продолжения в качестве закладки для выполнения запроса. Выполнение запросов Cosmos DB без отслеживания состояния на стороне сервера и может быть возобновлено в любое время с помощью маркера продолжения.

Это важно

Python SDK: маркеры продолжения для запросов между секциями поддерживаются для потоковых запросов (например, SELECT * FROM c WHERE ...). Агрегатные запросы между секциями (сортировка, подсчет, отдельные) не поддерживают маркеры продолжения. Ключ секции должен быть указан в объекте options.

Ниже приведен пример использования маркеров продолжения:

Если запрос возвращает маркер продолжения, есть дополнительные результаты запроса.

В REST API Cosmos DB можно управлять маркерами продолжения с помощью заголовка x-ms-continuation . Как и при запросе с помощью пакета SDK .NET или Java, если заголовок ответа x-ms-continuation не пуст, это означает, что запрос имеет дополнительные результаты.

Если вы используете ту же версию пакета SDK, маркеры продолжения никогда не истекают. При необходимости можно ограничить размер маркера продолжения. Независимо от объема данных или количества физических секций в контейнере запросы возвращают один маркер продолжения.

Маркеры продолжения нельзя использовать для запросов или GROUP BYDISTINCT из-за того, что эти запросы потребуют хранения значительного количества состояний. Для запросов с использованием DISTINCT можно использовать маркеры продолжения при добавлении ORDER BY в запрос.

Ниже приведен пример запроса, который DISTINCT может использовать маркер продолжения:

SELECT DISTINCT VALUE
    e.name
FROM
    employees e
ORDER BY
    e.name