Referens för Azure Digital Twins-frågespråk: JOIN-sats
Det här dokumentet innehåller referensinformation om JOIN-satsen för Azure Digital Twins-frågespråket.
Satsen JOIN
används i Azure Digital Twins-frågespråket som en del av FROM-satsen när du vill fråga för att bläddra i Azure Digital Twins-grafen.
Den här satsen är valfri vid frågor.
Kärnsyntax: JOIN ... RELATERADE
Eftersom relationer i Azure Digital Twins är en del av digitala tvillingar, inte oberoende entiteter, används nyckelordet RELATED
i JOIN
frågor för att referera till uppsättningen relationer av en viss typ från tvillingsamlingen (typen anges med hjälp av relationens name
fält från dess DTDL-definition). Uppsättningen relationer kan tilldelas ett samlingsnamn i frågan.
Frågan måste sedan använda WHERE
-satsen för att ange vilken specifik tvilling eller tvillingar som används för att stödja relationsfrågan, vilket görs genom filtrering på antingen käll- eller måltvillingens $dtId
värde.
Syntax
--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>'
Exempel
Följande fråga väljer alla digitala tvillingar som är relaterade till tvillingen med ID ABC
:t via en contains
relation.
SELECT T, CT
FROM DIGITALTWINS T
JOIN CT RELATED T.contains
WHERE T.$dtId = 'ABC'
Flera JOIN
Upp till fem JOIN
s stöds i en enda fråga, vilket möjliggör bläddering av flera nivåer av relationer samtidigt.
Syntax
--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>
Exempel
Följande fråga baseras på Rum som innehåller LightPanels och varje LightPanel innehåller flera lightbulbs. Frågan hämtar alla glödlampor som finns i LightPanels i rum 1 och 2.
SELECT LightBulb
FROM DIGITALTWINS Room
JOIN LightPanel RELATED Room.contains
JOIN LightBulb RELATED LightPanel.contains
WHERE Room.$dtId IN ['room1', 'room2']
Begränsningar
Följande begränsningar gäller för frågor som använder JOIN
.
Mer information finns i följande avsnitt.
Djupgräns på fem
Grafblädderingsdjupet är begränsat till fem JOIN
nivåer per fråga.
Exempel
Följande fråga illustrerar det maximala antalet JOIN
satser som är möjliga i en Azure Digital Twins-fråga. Den får alla glödlampor i byggnad 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'
Ingen yttre kopplingssemantik
OUTER JOIN
semantik stöds inte, vilket innebär att om relationen har en rangordning på noll tas hela "raden" bort från resultatuppsättningen.
Exempel
Tänk på följande fråga som illustrerar en byggnadsbläddring.
SELECT Building, Floor
FROM DIGITALTWINS Building
JOIN Floor RELATED Building.contains
WHERE Building.$dtId = 'Building1'
Om Building1 inte innehåller några våningar returnerar den här frågan en tom resultatuppsättning (i stället för att returnera en rad med värdet Byggnad och undefined
för Golv).
Tvillingar krävs
Relationer i Azure Digital Twins kan inte efterfrågas som oberoende entiteter. du måste också ange information om källtvillingen som relationen kommer från. Den här funktionen ingår som en del av standardanvändningen JOIN
i Azure Digital Twins via nyckelordet RELATED
.
Frågor med en JOIN
-sats måste också filtreras efter en tvillings $dtId
-egenskap i WHERE
-satsen för att klargöra vilka tvillingar som används för att stödja relationsfrågan.