Azure 流分析转换数组值

Azure Stream Analytics convert array values

非常具体的问题,如果我的流分析组件中有以下输入:

 //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
 }]

所以,我不需要单位值,为了保存space,我想使用'name'作为键,'value'作为键键值数组的值。 这是我当前的查询:

SELECT
input.outputs as outputs
INTO "to-mongodb"
FROM "from-iothub" input

但这当然会创建单独的 JSON 数组,其结构与我输入的结构相同。

有人知道怎么做吗?

在最坏的情况下,仅过滤掉 'unit' 也已经很有帮助了。

提前致谢

您可以在 Azure 流分析中使用 user-defined functions。请参考我为您测试的示例功能。

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

测试输出:

希望对你有帮助。