在Stream Analytics中使用SQL将含数组的流转换为多行
在Azure Stream Analytics中拆分IoT Hub流数据的数组元素为单独行
刚好最近处理过类似的场景,你可以用Azure Stream Analytics里的CROSS APPLY配合GetArrayElements()函数来实现这个需求,这是处理嵌套数组拆分最常用的方法。
针对你提供的IoT Hub流数据格式,对应的SQL查询如下:
SELECT inputData.topic, inputData.deviceId, arrayElement.ArrayValue.timestamp AS eventTimestamp, arrayElement.ArrayValue.device AS deviceName, arrayElement.ArrayValue.variable AS variableName, arrayElement.ArrayValue.name AS metricName, arrayElement.ArrayValue.value AS metricValue INTO [YourOutputSink] -- 替换成你的实际输出目标(比如Blob Storage、SQL数据库等) FROM [IoTHubStream] AS inputData -- 替换成你的IoT Hub输入流的别名 CROSS APPLY GetArrayElements(inputData.data) AS arrayElement
关键部分解释:
GetArrayElements(inputData.data):这个内置函数会将data字段中的数组拆分成单个元素,每个元素会被封装在ArrayValue对象中CROSS APPLY:将原始流中的每一条记录,与拆分后的数组元素进行关联,从而把数组中的每个元素转化为一条独立的输出记录- 你可以通过
arrayElement.ArrayValue.字段名的方式,直接提取数组子元素里的各个属性,还可以像示例中那样给字段起别名,让输出更清晰
针对你给出的样例输入,执行这个查询后会生成3条独立的记录,每条对应data数组里的一个元素。比如第一条输出记录的核心内容会是:
topic: saveData,deviceId: testDevice,eventTimestamp: 2018-04-06T11:46:11.842305,deviceName: baiTest,variableName: Status01_Test,metricName: m_01_test,metricValue: 365
记得根据你自己的Stream Analytics作业配置,替换掉查询中的输入流别名和输出目标名称哦。
内容的提问来源于stack exchange,提问作者eid
相关产品推荐
相关产品推荐

