微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

解析 azure 流分析中的 json 内容

如何解决解析 azure 流分析中的 json 内容

我的 sql 技能非常有限。请帮忙。

Azure IoT 边缘上的 Modbus 模块以这种格式(来自下载的示例数据)将 JSON 内容返回到流分析作业 -

[
  {
    "PublishTimestamp": "2021-07-28 19:28:15","Content": [
      {
        "HwId": "XY-MOD2-1","Data": [
          {
            "CorrelationId": "DefaultCorrelationId","SourceTimestamp": "2021-07-28 19:28:15","Values": [
              {
                "displayName": "Temperature","Address": "30002","Value": "210"
              },{
                "displayName": "Temperature","Address": "30003","Value": "538"
              }
            ]
          }
        ]
      }
    ],"EventProcessedUtcTime": "2021-07-28T20:26:23.9127084Z","PartitionId": 0,"EventEnqueuedUtcTime": "2021-07-28T19:28:15.9460000Z","IoTHub": {
      "MessageId": null,"CorrelationId": null,"Connectiondeviceid": "rp4linuxedge1","ConnectionDeviceGenerationId": "637630846187016425","EnqueuedTime": "2021-07-28T19:28:15.9550000Z","StreamId": null
    }
  },

我无法弄清楚应该使用什么 sql 语法来将其作为输出 -

源时间戳 地址 价值
时间 1 30002 210
时间 1 30003 538
时间 2 30002 215
时间 2 30003 540

enter image description here

解决方法

JSON 对象中的数组可以使用这个代码块访问 -

select 
    cast(dataArr.ArrayValue.SourceTimestamp as datetime) as SourceTimestamp,cast(valuesArr.ArrayValue.Address as bigint) as Address,cast(valuesArr.ArrayValue.Value as float) as Value

into powerbioutput
from iotinput i
cross apply GetArrayElements(i.Content) as contentArr
cross apply GetArrayElements(contentArr.ArrayValue.Data) as dataArr
cross apply GetArrayElements(dataArr.ArrayValue.[Values]) as valuesArr

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。