Cosmos DB: межсетевой запрос не может быть напрямую обслужен шлюзом - PullRequest
0 голосов
/ 16 декабря 2018

Есть идеи, почему, когда я выполняю запрос ниже в Cosmos DB, используя остальные API, я получаю ошибку ниже?Тот же самый запрос без заказа работает нормально ...

Я установил заголовок "x-ms-documentdb-query-enablecrosspartition: True" в обоих случаях и использую PHP для выполнения запросов.

MULTI PARTITIONЗАПРОС, КОТОРЫЙ РАБОТАЕТ:

ВЫБЕРИТЕ c.id, c.name, c.age ОТ c, где c.age = 30

MULTI PARTITION QUERY WITH ERROR:

ВЫБРАТЬ c.id, c.name, c.age ОТ c, где c.age = 30 упорядочить по c.age asc

ОШИБКА:

Ошибка клиента: POST https://yeapp-cosmosdb.documents.azure.com//dbs/-JJZAA==/colls/-JJZAL+WPKw=/docs

привела к ответу 400 BadRequest: {"code": "BadRequest", "message": "Указанный перекрестный разделзапрос не может быть напрямую обслужен шлюзом. Это (усеченный ...)

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

У меня просто была такая же проблема, которая, как мне кажется, только недавно проявилась.У меня не было этого раньше.У меня та же проблема, когда я использую SELECT DISTINCT для запроса с объединениями ... и вот почему https://docs.microsoft.com/en-us/rest/api/cosmos-db/querying-cosmosdb-resources-using-the-rest-api#Queries-that-cannot-be-served-by-gateway

Если вы удалите ORDER BY, а в моем случае DISTINCT, запрос работает ...

Это прискорбно.Примечание: тот же запрос работает с портала Azure, но не с API REST.Однако портал Azure вынуждает вас просматривать постраничные результаты, и на самом деле это не самый лучший способ использовать длинные результаты запросов или автоматизированные задачи ...

Из приведенной выше ссылки мы можем видеть это:

Шлюз не может обслуживать любой запрос, требующий состояния через продолжения.Это включает в себя: TOP ORDER BY OFFSET LIMIT Агрегаты DISTINCT GROUP BY Запросы, которые могут обслуживаться шлюзом, включают: Простые проекции Фильтры

0 голосов
/ 18 апреля 2019

У меня такая же проблема при выполнении запроса с использованием сценария R.По умолчанию используется политика индексирования для БД , которая включает в себя диапазон и пространственные индексы для всех элементов .Мой запрос работает, как и ожидалось, без условия «ORDER BY» и даже с предложением «ORDER BY», если только один результат.Кроме того, это работает, когда мое предложение "WHERE" указывает диапазон, например, c._ts > 12345678910, поэтому я не думаю, что предложение ngruson является проблемой.

Согласно этой странице , ошибка 400может возникнуть из-за плохо сконструированного вложения JSON.

Вот JSON, который работает:

{\"query\":\"SELECT TOP 100 * FROM c WHERE c.id = \\\"F6OWIDUtl0PElDAg0BPDr-j\\\" ORDER BY c._ts DESC\",\"parameters\":[]}

, а вот JSON, который возвращает ошибку:

{\"query\":\"SELECT TOP 100 * FROM c WHERE c.id != null ORDER BY c._ts DESC\",\"parameters\":[]}

Я не вижу очевидной разницы, поэтому я предполагаю, что проблема кроется где-то в другом месте.

(я бы добавил это в комментарии, но ТАК не позволяет мне комментировать с моим уровнем повторения, поэтомуэто был либо «ответ» здесь, либо дублирование вопроса в другом месте.)

...