简体   繁体   English

流分析-处理没有数组名称的JSON

[英]Stream Analytics - Processing JSON with no array name

IoT Edge v2 with the modbus module sends data to IoT Hub in the format of: 带有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"
},
...
]

I want to convert this array to rows using a stream analytics query containing the CROSS APPLY GetArrayElements() but this function requires an array name. 我想使用包含CROSS APPLY GetArrayElements()的流分析查询将此数组转换为行,但是此函数需要一个数组名称。 Obviously there is no name. 显然没有名字。 Any suggestions? 有什么建议么?

https://docs.microsoft.com/en-us/stream-analytics-query/getarrayelements-azure-stream-analytics https://docs.microsoft.com/en-us/azure/stream-analytics/stream-analytics-parsing-json https://docs.microsoft.com/zh-CN/stream-analytics-query/getarrayelements-azure-stream-analytics https://docs.microsoft.com/zh-CN/azure/stream-analytics/stream-analytics -parsing-json

Yes, it needs an array name. 是的,它需要一个数组名称。 CROSS APPLY GetArrayElements() is used for nested array. CROSS APPLY GetArrayElements()用于嵌套数组。

Example: 例:

[{
      "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",
  }
]

You could use below sql to convert it to rows: 您可以使用下面的sql将其转换为行:

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

However ,now the input data you provided is a pure array. 但是,现在您提供的输入数据是纯数组。 If you want to convert this array to rows, just use sql: 如果要将此数组转换为行,只需使用sql:

select jsoninput.* from jsoninput

在此处输入图片说明

You don't have to use GetArrayElements. 您不必使用GetArrayElements。 Just selecting json array as input format is enough. 仅选择json数组作为输入格式就足够了。 Stream analytics reads each object in the array as a record. 流分析将读取数组中的每个对象作为记录。 Same with line or whitespace separated jain objects, each object is read as a record. 与行或空格分隔的ja那教对象相同,每个对象都作为记录读取。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM