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á.
Základní syntaxe: JOIN ... PŘÍBUZNÝ
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 JOIN
s, 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.