You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:26:00