Sdílet prostřednictvím


Referenční informace k dotazovacímu jazyku Azure Digital Twins: klauzule JOIN

Tento dokument obsahuje referenční informace o klauzuli JOIN pro dotazovací jazyk Azure Digital Twins.

Klauzule JOIN se používá v dotazovacím jazyce Azure Digital Twins jako součást klauzule FROM, pokud chcete dotazovat na procházení grafu Azure Digital Twins.

Tato klauzule je při dotazování nepovinná.

Vzhledem k tomu, že relace ve službě Azure Digital Twins jsou součástí digitálních dvojčat, nikoli nezávislých entit, RELATED klíčové slovo se používá v JOIN dotazech k odkazování na sadu relací určitého typu z kolekce dvojčat (typ je zadaný pomocí pole relace name z definice DTDL). Sada relací může být v dotazu přiřazena název kolekce.

Dotaz pak musí pomocí WHERE klauzule určit, které konkrétní dvojče nebo dvojčata se používají k podpoře dotazu relace, který se provádí filtrováním hodnoty zdrojového nebo cílového $dtId dvojčete.

Syntaxe

--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>'

Příklad

Následující dotaz vybere všechna digitální dvojčata, která souvisejí s dvojčetem s ID ABC relace contains .

SELECT T, CT
FROM DIGITALTWINS T
JOIN CT RELATED T.contains
WHERE T.$dtId = 'ABC'

Více joinů

V jednom dotazu je podporováno až pět JOINs, což umožňuje procházení více úrovní relací najednou.

Syntaxe

--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>

Příklad

Následující dotaz je založený na místnostech, které obsahují LightPanels, a každý LightPanel obsahuje několik žárovky. Dotaz získá všechny žárovky obsažené v lightpanelech místností 1 a 2.

SELECT LightBulb
FROM DIGITALTWINS Room
JOIN LightPanel RELATED Room.contains
JOIN LightBulb RELATED LightPanel.contains
WHERE Room.$dtId IN ['room1', 'room2']

Omezení

Následující omezení platí pro dotazy používající JOIN.

Další informace najdete v následujících částech.

Limit hloubky pěti

Hloubka procházení grafu je omezená na pět JOIN úrovní na dotaz.

Příklad

Následující dotaz ukazuje maximální počet JOIN klauzulí, které jsou možné v dotazu Azure Digital Twins. Dostane všechny žárovky v budově 1.

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'

Bez sémantiky VNĚJŠÍ SPOJENÍ

OUTER JOIN sémantika není podporována, což znamená, že pokud má relace pořadí nula, z výstupní sady výsledků se eliminuje celý řádek.

Příklad

Představte si následující dotaz, který znázorňuje procházení budovy.

SELECT Building, Floor
FROM DIGITALTWINS Building
JOIN Floor RELATED Building.contains
WHERE Building.$dtId = 'Building1'

Pokud Building1 neobsahuje žádné podlahy, vrátí tento dotaz prázdnou sadu výsledků (místo vrácení jednoho řádku s hodnotou Pro budovu a undefined podlahu).

Vyžaduje se dvojčata.

Relace ve službě Azure Digital Twins se nedají dotazovat jako nezávislé entity; potřebujete také zadat informace o zdrojovém dvojčeti, ze kterého relace pochází. Tato funkce je součástí výchozího JOIN použití ve službě Azure Digital Twins prostřednictvím klíčového RELATED slova.

Dotazy s JOIN klauzulí musí také filtrovat podle vlastnosti libovolného $dtId dvojčete v WHERE klauzuli, aby bylo jasné, které dvojčata se používají k podpoře dotazu relace.