Share via


Query's voor IoT Hub-taken

Taken bieden een manier om bewerkingen uit te voeren op sets apparaten. Elke apparaatdubbel bevat de informatie van de taken die erop gericht zijn in een verzameling met de naam jobs. met IoT Hub kunt u query's uitvoeren op taken als één JSON-document met alle dubbelgegevens.

Hier volgt een voorbeeld van een IoT Hub-apparaatdubbel die deel uitmaakt van een taak met de naam 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
            }
        },
        ...
    ]
}

Op dit moment kunt u op deze verzameling query's uitvoeren als devices.jobs in de querytaal IoT Hub.

Belangrijk

Momenteel wordt de eigenschap jobs niet geretourneerd bij het uitvoeren van query's op apparaatdubbels. Dat wil gezegd, query's die bevatten FROM devices. De eigenschap Jobs kan alleen rechtstreeks worden geopend met query's met behulp van FROM devices.jobs.

De volgende query retourneert bijvoorbeeld alle taken (in het verleden en gepland) die van invloed zijn op één apparaat:

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

Houd er rekening mee dat deze query de apparaatspecifieke status (en mogelijk het directe methodeantwoord) van elke geretourneerde taak biedt.

Het is ook mogelijk om te filteren met willekeurige Booleaanse voorwaarden op alle objecteigenschappen in de verzameling devices.jobs .

Met de volgende query worden bijvoorbeeld alle voltooide updatetaken voor apparaatdubbels opgehaald die na september 2016 zijn gemaakt voor een specifiek apparaat:

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'

U kunt ook de resultaten per apparaat van één taak ophalen.

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

Beperkingen voor takenquery's

Query-expressies mogen maximaal 8192 tekens lang zijn.

Query's op devices.jobs bieden momenteel geen ondersteuning voor:

  • Projecties zijn daarom alleen SELECT * mogelijk.
  • Voorwaarden die verwijzen naar de apparaatdubbel naast taakeigenschappen (zie de vorige sectie).
  • Aggregaties, zoals count, avg en group by.

Volgende stappen