Azure Digital Twins クエリ言語リファレンス: SELECT 句

このドキュメントには、Azure Digital Twins クエリ言語SELECT 句に関するリファレンス情報が含まれています。

SELECT 句は、クエリの最初の部分です。 これにより、クエリによって返される列の一覧を指定します。

この句は、すべてのクエリで必要になります。

SELECT *

* 文字を select ステートメントで使用すると、デジタル ツイン ドキュメントはそのまま射影され、結果セットのプロパティには割り当てられません。

Note

SELECT * は、クエリで JOIN を使用しない場合にのみ有効な構文です。 JOIN を使用したクエリの詳細については、「Azure Digital Twins クエリ言語リファレンス: JOIN 句」を参照してください。

構文

SELECT *
--FROM ...

戻り値

クエリから返されるプロパティのセット。

次のクエリでは、インスタンス内のすべてのデジタル ツインが返されます。

SELECT *
FROM DIGITALTWINS

プロジェクションを使用した SELECT 列

プロジェクションを SELECT 句で使用して、クエリによって返される列を選択できます。 ツインとリレーションシップの名前指定コレクション、またはツインとリレーションシップのプロパティを指定できます。

プロジェクションは、プリミティブ プロパティと複合プロパティの両方でサポートされるようになりました。

構文

コレクションを射影するには:

SELECT <twin-or-relationship-collection>

プロパティを射影するには:

SELECT <twin-or-relationship-collection>.<property-name>

戻り値

プロジェクションで指定されたツイン、プロパティ、またはリレーションシップのコレクション。

プロジェクションに含まれるプロパティが特定のデータ行に存在しない場合、このプロパティは結果セットにも同様に存在しません。 この動作の例については、「プロパティを射影する例: データ行のプロパティが存在しない場合」を参照してください。

シナリオ例

次の例では、次のデータ要素を含むツイン グラフについて考えてみましょう。

  • FactoryA と呼ばれるファクトリ ツイン
    • FactoryA の値を持つ name というプロパティが含まれています
  • Contoso と呼ばれるコンシューマー ツイン
    • Contoso の値を持つ name というプロパティが含まれています
  • FactoryA-consumerRelationship-Contoso と呼ばれる、FactoryA から Contoso への consumerRelationship リレーションシップ
    • Jeff の値を持つ managedBy というプロパティが含まれています

次の図にこのシナリオを示します。

上記のサンプル グラフを示す図。

コレクションを射影する例

このグラフからコレクションを射影するクエリの例を下に示します。 次のクエリでは、ツイン コレクション全体に T の名前を付け、返すコレクションとして T を射影することで、インスタンス内のすべてのデジタル ツインが返されます。

SELECT T
FROM DIGITALTWINS T

このクエリから返される JSON ペイロードを次に示します。

{
  "value": [
    {
      "result": [
        {
          "T": {
            "$dtId": "FactoryA",
            "$etag": "W/\"d22267a0-fd4f-4f6b-916d-4946a30453c9\"",
            "$metadata": {
              "$model": "dtmi:contosocom:DigitalTwins:Factory;1",
              "name": {
                "lastUpdateTime": "2021-04-19T17:15:54.4977151Z"
              }
            },
            "name": "FactoryA"
          }
        },
        {
          "T": {
            "$dtId": "Contoso",
            "$etag": "W/\"a96dc85e-56ae-4061-866b-058a149e03d8\"",
            "$metadata": {
              "$model": "dtmi:com:contoso:Consumer;1",
              "name": {
                "lastUpdateTime": "2021-04-19T17:16:30.2154166Z"
              }
            },
            "name": "Contoso"
          }
        }
      ]
    }
  ],
  "continuationToken": "null"
}

JOIN を使用して射影する例

プロジェクションは通常、JOIN で指定されたコレクションを返すために使用されます。 次のクエリでは、プロジェクションを使用してコンシューマー、ファクトリ、リレーションシップのデータが返されます。 この例で使用されている JOIN 構文の詳細については、「Azure Digital Twins クエリ言語リファレンス: JOIN 句」を参照してください。

SELECT Consumer, Factory, Relationship
FROM DIGITALTWINS Factory
JOIN Consumer RELATED Factory.consumerRelationship Relationship
WHERE Factory.$dtId = 'FactoryA'

このクエリから返される JSON ペイロードを次に示します。

{
  "value": [
    {
      "result": [
        {
          "Consumer": {
            "$dtId": "Contoso",
            "$etag": "W/\"a96dc85e-56ae-4061-866b-058a149e03d8\"",
            "$metadata": {
              "$model": "dtmi:com:contoso:Consumer;1",
              "name": {
                "lastUpdateTime": "2021-04-19T17:16:30.2154166Z"
              }
            },
            "name": "Contoso"
          },
          "Factory": {
            "$dtId": "FactoryA",
            "$etag": "W/\"d22267a0-fd4f-4f6b-916d-4946a30453c9\"",
            "$metadata": {
              "$model": "dtmi:contosocom:DigitalTwins:Factory;1",
              "name": {
                "lastUpdateTime": "2021-04-19T17:15:54.4977151Z"
              }
            },
            "name": "FactoryA"
          },
          "Relationship": {
            "$etag": "W/\"f01e07c1-19e4-4bbe-a12d-f5761e86d3e8\"",
            "$relationshipId": "FactoryA-consumerRelationship-Contoso",
            "$relationshipName": "consumerRelationship",
            "$sourceId": "FactoryA",
            "$targetId": "Contoso",
            "managedBy": "Jeff"
          }
        }
      ]
    }
  ],
  "continuationToken": "null"
}

プロパティを射影する例

プロパティを射影する例を次に示します。 次のクエリでは、プロジェクションを使用して、コンシューマー ツインの name プロパティとリレーションシップの managedBy プロパティが返されます。

SELECT Consumer.name, Relationship.managedBy
FROM DIGITALTWINS Factory
JOIN Consumer RELATED Factory.consumerRelationship Relationship
WHERE Factory.$dtId = 'FactoryA'

このクエリから返される JSON ペイロードを次に示します。

{
  "value": [
    {
      "result": [
        {
          "managedBy": "Jeff",
          "name": "Contoso"
        }
      ]
    }
  ],
  "continuationToken": "null"
}

プロパティを射影する例: データ行のプロパティが存在しない場合

プロジェクションに含まれるプロパティが特定のデータ行に存在しない場合、このプロパティは結果セットにも同様に存在しません。

この例では、人物を表すツインのセットを考えましょう。 ツインの中には年齢が関連付けられているものがありますが、そうでないものもあります。

nameage の各プロパティを射影するクエリを次に示します。

SELECT name, age 
FROM DIGITALTWINS

結果は次のようになります。結果の中で、一部のツインに age プロパティがありませんが、そのツインにはこのプロパティは存在しません。

{
  "value": [
    {
      "result": [
        {
          "name": "John",
          "age": 27
        },
        {
          "name": "Keanu"
        }
      ]
    }
  ],
  "continuationToken": "null"
}

SELECT COUNT

このメソッドを使用すると、結果セット内の項目の数をカウントし、その数を返すことができます。

構文

SELECT COUNT()

引数

[なし] :

戻り値

int 値。

次のクエリは、インスタンス内のすべてのデジタル ツインの数を返します。

SELECT COUNT()
FROM DIGITALTWINS

次のクエリは、インスタンス内のすべてのリレーションシップの数を返します。

SELECT COUNT()
FROM RELATIONSHIPS

SELECT TOP

このメソッドを使用すると、クエリの要件を満たす一部の上位項目だけを返すことができます。

構文

SELECT TOP(<number-of-return-items>)

引数

選択する上位項目の数を指定する int 値。

戻り値

ツインのコレクション。

次のクエリでは、インスタンス内の上位 5 個のデジタル ツインのみが返されます。

SELECT TOP(5)
FROM DIGITALTWINS