Skip to main content

Azure IoT Hub上针对孪生设备的查询语言

分类:  Azure物联网 标签:  #Azure #IoT Hub # 发布于: 2023-06-12 21:43:25

Azure IoT Hub提供类似SQL的查询语言,专门针对如下几种对象进行查询:

  • 孪生设备(device twin)
  • 孪生模块(module twin)
  • 计划任务( jobs)
  • 路由消息( Message Routing)

注意
关于路由消息的查询,后面学习Message的时候再进一步深入。

当使用查询语言是,上述几种对象针对的对象名分别为:

  • 孪生设备(device twin): devices, 例如:SELECT * FROM devices
  • 孪生模块(module twin): devices.modules, 例如: SELECT * FROM devices.modules
  • 计划任务(jobs): devices.jobs, 例如: SELECT * FROM devices.jobs
    WHERE devices.jobs.deviceId = 'myDeviceId'

查询的基本格式是:

SELECT <select_list>
  FROM <from_specification>
  [WHERE <filter_condition>]
  [GROUP BY <group_specification>]

这里的from 指代的对象是:devices, devices.modules, devices.jobs,

基本的例子:

查询Hub中所有的孪生设备:

SELECT * FROM devices

查询location位于美国的设备:

SELECT * FROM devices
WHERE tags.location.region = 'US'

查询发送频率大于60秒的孪生设备:

SELECT * FROM devices
  WHERE tags.location.region = 'US'
    AND properties.reported.telemetryConfig.sendFrequencyInSecs >= 60

查询以有线网络和wifi链接的孪生设备

SELECT * FROM devices
  WHERE properties.reported.connectivity IN ['wired', 'wifi']

IoT Hub还定义了很多函数,可以直接使用,例如is_define查看是否定义了某个属性:

SELECT * FROM devices
  WHERE is_defined(properties.reported.connectivity)

查询孪生模块:

SELECT * FROM devices.modules
  WHERE properties.reported.status = 'scanning'
  AND deviceId IN ['device1', 'device2']

查询计划任务:

SELECT * FROM devices.jobs
  WHERE devices.jobs.deviceId = 'myDeviceId'
    AND devices.jobs.jobType = 'scheduleTwinUpdate'
    AND devices.jobs.status = 'completed'
    AND devices.jobs.createdTimeUtc > '2016-09-01'

详细的查询可以参考文档:https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-query-language