Cosmos DB: межсетевой запрос не может быть напрямую обслужен шлюзом

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

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

МНОГОСТОРОННИЕ РАЗДЕЛЫ, КОТОРЫЙ РАБОТАЕТ

ВЫБЕРИТЕ 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 response: {"code":"BadRequest","message":"Предоставленный межсекторный запрос не может быть напрямую обслужен шлюзом. Это (усечено...)

0 ответов

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

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

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

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

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

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

Согласно этой странице, ошибка 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\":[]}

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

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

Другие вопросы по тегам