次の方法で共有


IoT Hub ジョブのクエリ

ジョブでは、一連のデバイスで操作を実行する方法が提供されます。 各デバイス ツインには、jobs という名前のコレクションにあるジョブに関する情報が含まれています。 IoT Hub では、すべてのツイン情報を含む 1 つの 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 でクエリを実行できます。

重要

現在は、デバイス ツインのクエリを実行したとき、ジョブのプロパティは返されません。 つまり、FROM devices を含むクエリです。 ジョブのプロパティに直接アクセスするには、FROM devices.jobs を使用してクエリを実行する必要があります。

たとえば、次のクエリは、1 つのデバイスに影響を与えるすべてのジョブ (過去のジョブとスケジュール済みのジョブ) を返します。

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'

また、1 つのジョブによるデバイスごとの結果を取得することもできます。

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

ジョブ クエリの制限事項

クエリ式の最大文字数は 8,192 文字です。

現在のところ、devices.jobs に対するクエリはサポートされていません。

  • プロジェクション。SELECT * のみ実行可能
  • 条件。ジョブのプロパティ以外にデバイス ツインを参照するもの (上述のセクションを参照)
  • count、avg、group by などの集計。

次のステップ