Compartir a través de

IoT 中心作业的查询

使用作业可对一组设备执行操作。 每个设备孪生包含在名为“作业”的集合中锁定该设备的作业的信息。 通过 IoT 中心,可将作业作为包含所有孪生信息的单个 JSON 文档进行查询。

以下是一个示例 IoT 中心孪生设备,它是名为 myJobId 作业的一部分:

{
    "deviceId": "myDeviceId",
    "etag": "AAAAAAAAAAc=",
    "tags": {
        ...
    },
    "properties": {
        ...
    },
    "jobs": [
        {
            "deviceId": "myDeviceId",
            "jobId": "myJobId",
            "jobType": "scheduleUpdateTwin",
            "status": "completed",
            "startTimeUtc": "2016-09-29T18:18:52.7418462",
            "endTimeUtc": "2016-09-29T18:20:52.7418462",
            "createdDateTimeUtc": "2016-09-29T18:18:56.7787107Z",
            "lastUpdatedDateTimeUtc": "2016-09-29T18:18:56.8894408Z",
            "outcome": {
                "deviceMethodResponse": null
            }
        },
        ...
    ]
}

目前,可以使用 IoT 中心查询语言以 devices.jobs 形式查询此集合。

重要

目前,查询设备孪生时不会返回作业属性。 即包含 FROM devices 的查询。 该作业属性仅可通过使用 FROM devices.jobs 的查询直接访问。

例如,以下查询返回影响单个设备的所有作业(过去的作业和计划的作业):

SELECT * FROM devices.jobs
  WHERE devices.jobs.deviceId = 'myDeviceId'

请注意此查询如何提供每个返回的作业的设备特定状态(可能还会提供直接方法响应)。

还可针对 devices.jobs 集合中的所有对象属性使用任意布尔条件进行筛选。

例如,以下查询为特定设备检索在 2016 年 9 月之后创建的所有已完成的设备孪生更新作业:

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

还可以检索单个作业在每个设备上的结果。

SELECT * FROM devices.jobs
  WHERE devices.jobs.jobId = 'myJobId'

作业查询限制

查询表达式的最大长度可以为 8192 个字符。

目前,针对 devices.jobs 的查询不支持:

  • 投影,因此仅可使用 SELECT *
  • 引用设备孪生和作业属性的条件(参见上一节)。
  • 聚合,例如 count、avg、group by。

后续步骤