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\":[]}
Я не вижу очевидной разницы, поэтому я предполагаю, что проблема заключается в другом.
(Я бы добавил это в комментариях, но ТАК не позволяет мне комментировать с моим уровнем репутации, так что это был либо "ответ" здесь, либо дублирование вопроса в другом месте.)