Azure Digital Twins クエリ言語リファレンス: JOIN 句
このドキュメントには、Azure Digital Twins クエリ言語の JOIN 句に関するリファレンス情報が含まれています。
JOIN
句は、クエリで Azure Digital Twins グラフをトラバーサルする場合に、Azure Digital Twins クエリ言語で JOIN
の一部として使用されます。
この句はクエリの実行時に省略可能です。
コア構文: JOIN ... RELATED
Azure Digital Twins のリレーションシップは、独立したエンティティでなく、デジタル ツインの一部であるため、ツイン コレクションから特定のタイプのリレーションシップのセットを参照するには、JOIN
クエリで RELATED
キーワードを使います (タイプは DTDL 定義のリレーションシップの name
フィールドを使って指定します)。 リレーションシップのセットには、クエリ内でコレクション名を割り当てることができます。
次に、クエリでは WHERE
句を使用して、リレーションシップ クエリをサポートするために使用されている特定のツイン (1 つまたは複数) を指定する必要があります。これは、ソースまたはターゲット ツインの $dtId
値をフィルター処理することによって行われます。
構文
--SELECT ...
FROM DIGITALTWINS <twin-collection-name>
JOIN <target-twin-collection-name> RELATED <twin-collection-name>.<relationship-name> <OPTIONAL: relationship-collection-name>
WHERE <twin-collection-name-OR-target-twin-collection-name>.$dtId = '<twin-id>'
例
次のクエリでは、contains
リレーションシップを通じて ID が ABC
のツインと関連しているすべてのデジタル ツインが選択されます。
SELECT T, CT
FROM DIGITALTWINS T
JOIN CT RELATED T.contains
WHERE T.$dtId = 'ABC'
複数の JOIN
1 つのクエリで最大 5 つの JOIN
がサポートされているため、複数レベルのリレーションシップを一度にトラバーサルできます。
構文
--SELECT ...
FROM DIGITALTWINS <twin-collection-name>
JOIN <relationship-collection-name-1> RELATED <twin-collection-name>.<relationship-type-1>
JOIN <relationship-collection-name-2> RELATED <twin-or-relationship-collection-name>.<relationship-type-2>
例
次のクエリが基づく Room には LightPanel が含まれており、各 LightPanel には複数の LightBulb が含まれています。 このクエリでは、room 1 と 2 の LightPanel に含まれるすべての LightBulb を取得します。
SELECT LightBulb
FROM DIGITALTWINS Room
JOIN LightPanel RELATED Room.contains
JOIN LightBulb RELATED LightPanel.contains
WHERE Room.$dtId IN ['room1', 'room2']
制限事項
次の制限は、JOIN
を使用したクエリに適用されます。
詳細については、次のセクションを参照してください。
5 の深さ制限
グラフ トラバーサルの深さがクエリごとに 5 つの JOIN
レベルに制限されます。
例
次のクエリは、Azure Digital Twins クエリで可能な JOIN
句の最大数を示しています。 これにより Building1 のすべての LightBulb が取得されます。
SELECT LightBulb
FROM DIGITALTWINS Building
JOIN Floor RELATED Building.contains
JOIN Room RELATED Floor.contains
JOIN LightPanel RELATED Room.contains
JOIN LightBulbRow RELATED LightPanel.contains
JOIN LightBulb RELATED LightBulbRow.contains
WHERE Building.$dtId = 'Building1'
OUTER JOIN セマンティクスがない
OUTER JOIN
セマンティクスはサポートされていません。つまり、リレーションシップのランクがゼロの場合、"行" 全体が出力結果セットから削除されます。
例
Building (建物) のトラバーサルを示す次のクエリについて考えてみましょう。
SELECT Building, Floor
FROM DIGITALTWINS Building
JOIN Floor RELATED Building.contains
WHERE Building.$dtId = 'Building1'
Building1 に Floor (フロア) が含まれていない場合、このクエリでは (建物の値とフロアの undefined
を持つ 1 つの行を返す代わりに) 空の結果セットが返されます。
ツインが必要
Azure Digital Twins のリレーションには、独立したエンティティのようにクエリを実行できません。リレーションシップの発生元になるソース ツインに関する情報も提供する必要があります。 この機能は、RELATED
キーワードによる Azure Digital Twins の既定の JOIN
使用の一部として含まれています。
JOIN
句を使用したクエリでは、WHERE
句の任意のツインの $dtId
プロパティによるフィルター処理もする必要があります。これにより、リレーションシップ クエリをサポートするために使用されているツインが明確になります。