Как отрендерить JSON с помощью запроса Stream Analytics

У меня есть входные данные в виде JSON, хранящиеся в хранилище BLOB-объектов. У меня есть выходные данные в виде таблицы SQL Azure.

Я написал запрос и успешно переместил значение определенного свойства в JSON в соответствующий столбец таблицы SQL Azure.

Теперь для одного столбца я хочу скопировать всю полезную нагрузку JSON как сериализованную строку в один столбец sql, я не получаю надлежащую библиотечную функцию для этого.

SELECT
     CASE 
        WHEN GetArrayLength(E.event) > 0
            THEN GetRecordPropertyValue(GetArrayElement(E.event, 0), 'name')
        ELSE ''
    END AS EventName 
    ,E.internal.data.id as DataId
    ,E.internal.data.documentVersion as DocVersion

    ,E.context.custom As CustomDimensionsPayload

Into OutputTblEvents
FROM InputBlobEvents E

Этот CustomDimensionsPayload должен быть на самом деле JSON


person Abhi    schedule 25.10.2016    source источник
comment
Если ваш входной столбец json CustomDimensionsPayload является объектом (в отличие от строки), в настоящее время это невозможно в аналитике потока Azure.   -  person Vignesh Chandramohan    schedule 09.01.2017


Ответы (2)


Я создал пользовательскую функцию, которая выполнила всю работу за меня:

function main(InputJSON) {
    var InputJSONString = JSON.stringify(InputJSON);
    return InputJSONString;
}

Затем внутри запроса я использовал такую ​​функцию:

SELECT udf.ConvertToJSONString(COLLECT()) AS InputJSON
INTO outputX
FROM inputY
person Per Schjetne    schedule 07.03.2017
comment
Вы добавили GROUP BY? У меня возникает следующая ошибка: у задания Stream Analytics есть ошибки проверки: ошибка компиляции запроса: функция «collect» либо не поддерживается, либо не может использоваться в этом контексте. Пользовательские вызовы функций должны начинаться с udf. префикс. Агрегатные функции должны использоваться вместе с предложением GROUP BY. - person Christian Weiss; 23.04.2018

Вам нужно просто сослаться на сам входной объект вместо COLLECT (), если вы хотите преобразовать всю полезную нагрузку. Я тоже пытался это сделать, поэтому решил, что добавлю то, что сделал.

Я использовал ту же функцию, что и PerSchjetne, тогда запрос становится

SELECT udf.JSONToString(IoTInputStream)
INTO [SQLTelemetry]
FROM [IoTInputStream]

Теперь ваш вывод будет полной строкой JSON, включая все дополнительные метаданные, которые добавляет концентратор IOT.

person AJ_    schedule 09.04.2020