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