1

带有 modbus 模块的 IoT Edge v2 以以下格式向 IoT 中心发送数据:

[
{
    "DisplayName": "Voltage",
    "HwId": "",
    "Address": "400001",
    "Value": "200",
    "SourceTimestamp": "2019-01-03 23:40:24"
},
{
    "DisplayName": "Voltage",
    "HwId": "",
    "Address": "400002",
    "Value": "24503",
    "SourceTimestamp": "2019-01-03 23:40:24"
},
...
]

我想使用包含CROSS APPLY GetArrayElements()的流分析查询将此数组转换为行,但此函数需要数组名称。显然没有名字。有什么建议么?

https://docs.microsoft.com/en-us/stream-analytics-query/getarrayelements-azure-stream-analytics https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics -解析-json

4

2 回答 2

1

是的,它需要一个数组名称。CROSS APPLY GetArrayElements()用于嵌套数组。

例子:

[{
      "source": "xda",
      "data": 
        [{
            "masterTag": "UNIFY1",
            "speed": 180
        },
        {
            "masterTag": "UNIFY2",
            "speed": 180
        }],
      "EventEnqueuedUtcTime": "2018-07-20T19:28:18.5230000Z",
  },
  {
      "source": "xda",
      "data": [{
            "masterTag": "UNIFY3",
            "speed": 214
        },
        {
            "masterTag": "UNIFY4",
            "speed": 180
        }],
      "EventEnqueuedUtcTime": "2018-07-20T19:28:20.5550000Z",
  }
]

您可以使用下面的 sql 将其转换为行:

SELECT 
    jsoninput.source, 
    arrayElement.ArrayValue.masterTag
INTO 
    output
FROM jsoninput
CROSS APPLY GetArrayElements(jsoninput.data) AS arrayElement 

但是,现在您提供的输入数据是一个纯数组。如果要将此数组转换为行,只需使用 sql:

select jsoninput.* from jsoninput

在此处输入图像描述

于 2019-01-04T02:43:06.017 回答
0

您不必使用 GetArrayElements。只需选择 json 数组作为输入格式就足够了。流分析将数组中的每个对象作为记录读取。与行或空格分隔的 jain 对象相同,每个对象都作为记录读取。

于 2019-01-05T17:54:34.950 回答