IoT Hub 작업에 대한 쿼리

작업은 디바이스 집합에 대해 작업을 실행하는 방법을 제공합니다. 각 디바이스 쌍은 대상이 되는 작업에 대한 정보를 jobs 컬렉션에 포함합니다. IoT Hub를 사용하면 모든 쌍 정보를 포함하는 단일 JSON 문서로 작업을 쿼리할 수 있습니다.

다음은 myJobId라는 작업의 일부인 샘플 IoT Hub 디바이스 쌍입니다.

{
    "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 Hub 쿼리 언어를 사용하여 devices.jobs로 쿼리할 수 있습니다.

Important

현재 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와 같은 집계

다음 단계