Dela via


Frågespråksreferens för Azure Digital Twins: JOIN-sats

Det här dokumentet innehåller referensinformation om JOIN-satsen för Azure Digital Twins-frågespråket.

JOIN Satsen används i Azure Digital Twins-frågespråket som en del av FROM-satsen när du vill köra frågor för att bläddra i Azure Digital Twins-grafen.

Den här satsen är valfri när du frågar.

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 ett ID ABC via en contains relation.

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

Flera JOIN

Upp till fem JOINs 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 lightbulbs 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

Diagrambläderingsdjupet ä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 hämtar alla glödlampor i building1.

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, elimineras hela "raden" från resultatuppsättningen för utdata.

Exempel

Överväg följande fråga som illustrerar en byggnads blä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 ett värde för 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 tvillingpar som används för att stödja relationsfrågan.