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

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

JOIN 句は、クエリで Azure Digital Twins グラフをトラバーサルする場合に、Azure Digital Twins クエリ言語で JOINの一部として使用されます。

この句はクエリの実行時に省略可能です。

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 プロパティによるフィルター処理もする必要があります。これにより、リレーションシップ クエリをサポートするために使用されているツインが明確になります。