Query per processi di hub IoT

I processi consentono di eseguire operazioni su set di dispositivi. Ogni dispositivo gemello contiene le informazioni dei processi destinati a tale dispositivo in una raccolta denominata processi. hub IoT consente di eseguire query sui processi come singolo documento JSON contenente tutte le informazioni sui dispositivi gemelli.

Ecco un dispositivo gemello dell'hub IoT di esempio che fa parte di un processo denominato 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
            }
        },
        ...
    ]
}

Attualmente è possibile effettuare una query di questa raccolta come devices.jobs nel linguaggio di query dell'hub IoT.

Importante

Attualmente, la proprietà jobs non viene restituita durante l'esecuzione di query sui dispositivi gemelli. Ovvero, query che contengono FROM devices. La proprietà jobs è accessibile solo direttamente tramite query che usano FROM devices.jobs.

Ad esempio, la query seguente restituisce tutti i processi (precedenti e pianificati) che influiscono su un singolo dispositivo:

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

Si noti come questa query indichi lo stato specifico del dispositivo (e verosimilmente la risposta del metodo diretto) di ogni processo restituito.

È anche possibile filtrare con condizioni booleane arbitrarie su tutte le proprietà dell'oggetto nell'insieme devices.jobs .

Ad esempio, la query seguente recupera tutti i processi di aggiornamento dei dispositivi gemelli completati creati dopo settembre 2016 per un dispositivo specifico:

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'

È anche possibile recuperare i risultati per ogni dispositivo di un singolo processo.

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

Limitazioni delle query dei processi

Le espressioni di query possono avere una lunghezza massima di 8192 caratteri.

Attualmente, le query su devices.jobs non supportano:

  • Proiezioni, quindi è possibile solo SELECT *.
  • Condizioni che fanno riferimento al dispositivo gemello oltre alle proprietà del processo (vedere sezione precedente).
  • Aggregazioni, ad esempio count, avg e group by.

Passaggi successivi