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

Тестовый вывод:

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

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