在 Azure 流分析中转码数组

Transcoding arrays in Azure Stream Analytics

假设我有以下 JSON 数据结构进入流分析(由 IoT 设备生成):

{
    "user":"bob",
    "messages":[
    {
        "mac":"AA:BB:CC:DD:EE:FF",
        "data":[
            {
                "messagetype1":{
                    "param1":83,
                    "param2":82
                },
                "messagetype2":{
                    "param3":83,
                    "param4":82
                }
            }
        ]
    }]
}

在上面你可以看到数据数组包含命名对象。我需要存储对象名称以及其他参数。是否有内置函数来访问数组元素的对象名称? messagetype1 和 messagetype2 只是示例。

E.g.I 想存储:

{ "user":"bob", "mac":"AA:BB:CC:DD:EE:FF", "type":"messagetype1", "param1":83}
{ "user":"bob", "mac":"AA:BB:CC:DD:EE:FF", "type":"messagetype1", "param2":82}
{ "user":"bob", "mac":"AA:BB:CC:DD:EE:FF", "type":"messagetype2", "param3":83}
{ "user":"bob", "mac":"AA:BB:CC:DD:EE:FF", "type":"messagetype2", "param4":82}

处理此问题的最佳方法可能是使用 JavaScript UDFs

虽然通常可以通过 Array and Record functions tied up via CROSS APPLY 的某种组合来逃避,但在您的情况下,复杂的是展开不同的 messagetype* 记录。您将需要知道所有可能的 param* 名称的集合来制作正确的查询。或者,您可以使用 GetRecordProperties,但这样您将得到 {... "field_name":"param1", "field_value":83} 结构而不是所需的 { ... "param1":83} 结构。