Azure CosmosDB REST API пропускает результаты, возвращаемые проводником данных. - PullRequest
1 голос
/ 16 января 2020

У меня достаточно большая коллекция космических БД (около 1,5 миллионов записей). Если я запускаю запрос в индексированном поле в проводнике данных , например:

SELECT * FROM c WHERE ARRAY_CONTAINS(c.InnerArray, { "MyValue": 1234 }, true)

, я получаю результат, как и ожидал.

Если я выполняю тот же запрос через REST API, я получаю:

{
    "_rid": "...",
    "Documents": [],
    "_count": 0
}

Эта разница различается. Для некоторых документов я получаю его в обозревателе данных портала И API REST, для других - только в Обозревателе данных.

Я сократил одно отличие, но не уверен, что такое «исправление» (при условии, что это это проблема).

Если я экспортирую 'Метрики запросов на разделы (CSV)' из портала, я вижу, что документы, которые возвращаются через API REST, находятся в пределах 'идентификатора диапазона ключа раздела' 0 Те, которые не отображаются над API REST (но появляются на портале), находятся в «id диапазона ключей раздела» 1.

Есть ли какая-то дополнительная конфигурация или заголовок, которые мне нужно установить для API REST? ? Я устанавливаю заголовки запросов, включая x-ms-documentdb-query-enablecrosspartition, и получаю нулевые токены продолжения в ответе.

Дополнительное примечание : режим соединения C# SDK (как в шлюзе, так и в прямом) вернет документы что REST API не делает.

1 Ответ

0 голосов
/ 21 января 2020

При выполнении запросов с использованием REST API убедитесь, что вы используете и проверяете заголовок x-ms-continuation. Ссылка: https://docs.microsoft.com/rest/api/cosmos-db/common-cosmosdb-rest-response-headers

Вы можете выполнять итерацию (отправлять больше запросов), пока токен продолжения не будет возвращен в ответе.

SDK будет иметь такое поведение и Вот почему вы видели эту разницу. Это похоже на итерацию по проверке запроса для HasMoreResults или атрибута ContinuationToken в FeedResponse.

...