Azure Stream Analytics преобразует значения массива
Очень конкретный вопрос, если у меня есть следующий вход в мой компонент Streaming Analytics:
//some input
"outputs": [
{
"name": "output1",
"unit": "unit1",
"value": "95813"
},
{
"name": "output2",
"unit": "unit2",
"value": "303883"
}, // and more array values
Как я могу получить результат JSON, который будет выглядеть следующим образом:
"outputs":[ {
"output1":95813,
"output2":303883
//etc
}]
Итак, мне не нужно значение единицы, и для экономии места я бы хотел использовать "имя" в качестве ключа и "значение" в качестве значения массива "ключ-значение". Это мой текущий запрос:
SELECT
input.outputs as outputs
INTO "to-mongodb"
FROM "from-iothub" input
но это, конечно, создает отдельные массивы JSON с той же структурой, которую я получаю в качестве входных данных.
Кто-нибудь есть идеи о том, как это сделать?
В худшем случае, просто отфильтровывание "юнитов" также очень поможет.
заранее спасибо
1 ответ
Вы можете использовать пользовательские функции в Azure Stream Analytics. Пожалуйста, обратитесь к образцу функции, которую я тестировал для вас.
UDF:
function main(arg) {
var array = arg.outputs;
var returnJson = {};
var outputArray = [];
var map = {};
for(var i=0;i<array.length;i++){
var key=array[i].name;
map[key] = array[i].value;
}
outputArray.push(map);
returnJson = {"outputs" : outputArray};
return returnJson;
}
Запрос:
WITH
c AS
(
SELECT
udf.processArray(jsoninput) as result
from jsoninput
)
SELECT
c.result
INTO
jaycosmostest
FROM
c
Тестовый вывод:
Надеюсь, это поможет вам.