Документ / CosmosDB .Net клиент DISTINCT ошибка запроса

У меня есть коллекция, содержащая документы со следующей структурой:

{
    "Identifier": 1,
    "Values": {
        "value1": "33806",
        "value2": "10",
        "value3": "0"
    },
   ...
}

Я создал UDF для извлечения ключей из словаря Values:

function getKeys(dictionary) {
    let result = [];
    for (var key in dictionary) {
        result.push(key);
    }
    return result;
}

И у меня есть запрос, который использует UDF для поиска всех отдельных ключей в словаре Values. Следующий код вызывает CosmosDB с помощью библиотеки пакетов Microsoft.Azure.DocumentDB.Core nuget:

var query = $@"
    SELECT DISTINCT
    VALUE i
    FROM
    (
        SELECT
        VALUE
        {{
             'keys': udf.getKeys(c.Values), 
             'id': c.Identifier
        }}
        FROM c
        WHERE c.Identifier = @Identifier
    ) AS dt
    JOIN i in dt.keys";

    var parameters = new SqlParameterCollection(new[]
    {
        new SqlParameter("@Identifier", identifier)
    });

    var documentQuery = store.Query(new SqlQuerySpec(query, parameters));

Это работает с эмулятором Azure CosmosDB. Запрос отлично работает, когда я запускаю его через пользовательский интерфейс на http://localhost:8081.

При выполнении запроса через .NET-клиент я получаю следующую ошибку:

Microsoft.Azure.Documents.BadRequestException: Сообщение: {«ошибки»: [{«серьезность»: «Ошибка», «местоположение»: {«начало»: 25, «конец»: 33}, «код»: «SC1001» , "message": "Синтаксическая ошибка, неправильный синтаксис рядом с 'DISTINCT'."}]}, Windows / 10.0.16299 documentdb-netcore-sdk / 1.9.1 ---> System.Runtime.InteropServices.COMException: исключение из HRESULT : 0x800A0B00

Я еще не пробовал это против реального CosmosDB, однако тот факт, что это работает в проводнике данных, заставляет меня думать, что это не проблема с возможностями эмулятора.


person Oliver    schedule 13.09.2018    source источник


Ответы (1)


Я еще не пробовал это против реального CosmosDB, однако тот факт, что это работает в проводнике данных, заставляет меня думать, что это не проблема с возможностями эмулятора.

distinct поддерживается в sql эмулятором cosmos db или реальной версией. (https://feedback.azure.com/forums/263030-azure-cosmos-db/suggestions/6719531-provide-support-for-distinct?page=1&per_page=20)

Я протестировал ваш код с documentdb-netcore-sdk v.2.0.0, и он отлично работает. Согласно этому документу, ошибка, по-видимому, решена в предварительной версии 2.0.0 или более поздней версии. Вы можете обновить версию своего пакета.

Надеюсь, это поможет тебе.

person Jay Gong    schedule 13.09.2018
comment
Ура за это! Похоже, обновление вышло 5 дней назад! Дам это сейчас - person Oliver; 13.09.2018