Azure 将JSON数据行旋转到列中

Azure 将JSON数据行旋转到列中,azure,azure-stream-analytics,stream-analytics,Azure,Azure Stream Analytics,Stream Analytics,我需要你的帮助。 我有这样的数据 [{ "id": "0001", "type": "donut", "name": "Cake", "topping": [ { "id": "5003", "type": "Chocolate" }, { "id": "5004", "type": "Maple" } ] }] 我想将此转换为以下内容 参数将是动态的或多个的,而不仅仅是巧克力和枫木) 我想创建一个stream analytics查询,处理这些

我需要你的帮助。 我有这样的数据

[{
"id": "0001",
"type": "donut",
"name": "Cake",
"topping":
    [
        { "id": "5003", "type": "Chocolate" },
        { "id": "5004", "type": "Maple" }
    ]
}]
我想将此转换为以下内容

参数将是动态的或多个的,而不仅仅是巧克力和枫木)

我想创建一个stream analytics查询,处理这些数据并将其存储到目标表中,目标表中已经有了这些列,如Id、Name、Type、Chocolate、Maple。。。。。。 请在这方面帮助我。

您可以从ASA获得帮助

自定义项代码:

样本数据:

输出:


基于Jay的答案,您可以使用以下udf代码更高效地完成同样的事情:

主功能(arg){
返回arg.map(x=>(
x、 浇头。减少((acc,cur)=>{
acc[cur.type]=cur.id;//从topping数组动态添加项
返回acc;
},{id:x.id,type:x.type,name:x.name})//使用静态项初始化
)); 
}
遗憾的是,在撰写本文时,CosmosDb不支持ECMAScript 2018,因此您不能在对象上使用扩展运算符
,否则您将能够使用以下一个线性表达式:

主功能(arg){
返回arg.map(x=>(
x、 打顶(
(acc,cur)=>({…acc,[当前类型]:cur.id}),
{id:x.id,type:x.type,name:x.name}
)
));
}
function main(arg) {
    var array = arg.topping;
    var map = {};
    map["id"] = arg.id;
    map["type"] = arg.type;
    map["name"] = arg.name;
    for(var i=0;i<array.length;i++){        
        var key=array[i].type;        
        map[key] = array[i].id;      
    }
    return map;  
}
WITH 
c AS
(
    SELECT 
    udf.processArray(jsoninput) as result
    from jsoninput
)

select c.result
INTO
    jaycosmos
from c
[{
"id": "0001",
"type": "donut",
"name": "Cake",
"topping":
    [
        { "id": "5003", "type": "Chocolate" },
        { "id": "5004", "type": "Maple" }
    ]
},
{
"id": "0002",
"type": "donut2",
"name": "Cake2",
"topping":
    [
        { "id": "5005", "type": "Chocolate" }
    ]
}
]