Informations de référence sur le langage de requête Azure Digital Twins : clause JOIN
Ce document contient des informations de référence sur la clause JOIN du langage de requête Azure Digital Twins.
La clause JOIN
est utilisée dans le langage de requête Azure Digital Twins dans le cadre de la clause FROM lorsque vous souhaitez interroger le graphique Azure Digital Twins.
Cette clause est facultative lors de l’interrogation.
Syntaxe principale : JOIN ... RELATED
Dans Azure Digital Twins, les relations faisant partie de jumeaux numériques, et non d’entités indépendantes, le mot clé RELATED
est utilisé dans les requêtes JOIN
pour référencer l’ensemble de relations d’un certain type à partir de la collection de jumeaux (le type est spécifié à l’aide du champ name
de la relation dans sa définition DTDL). Un nom de collection peut être attribué à l’ensemble de relations dans la requête.
La requête doit ensuite utiliser la clause WHERE
pour spécifier le ou les jumeaux spécifiques utilisés pour prendre en charge la requête de relation, ce qui est effectué en filtrant sur la valeur $dtId
du jumeau source ou cible.
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>'
Exemple
La requête suivante sélectionne tous les jumeaux numériques associés au jumeau avec un ID ABC
via une relation contains
.
SELECT T, CT
FROM DIGITALTWINS T
JOIN CT RELATED T.contains
WHERE T.$dtId = 'ABC'
Plusieurs clauses JOIN
Jusqu’à cinq clauses JOIN
sont prises en charge dans une même requête, ce qui permet la traversée de plusieurs niveaux de relations à la fois.
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>
Exemple
La requête suivante est basée sur les salles contenant plusieurs panneaux lumineux, chacun contenant plusieurs ampoules. La requête obtient toutes les ampoules contenues dans les panneaux lumineux des salles 1 et 2.
SELECT LightBulb
FROM DIGITALTWINS Room
JOIN LightPanel RELATED Room.contains
JOIN LightBulb RELATED LightPanel.contains
WHERE Room.$dtId IN ['room1', 'room2']
Limites
Les limites suivantes s’appliquent aux requêtes utilisant JOIN
.
Pour plus d’informations, consultez les sections suivantes.
Limite de profondeur de cinq
La profondeur de la traversée du graphe est restreinte à cinq niveaux JOIN
autorisés par requête.
Exemple
La requête suivante illustre le nombre maximal de clauses JOIN
possibles dans une requête Azure Digital Twins. Elle obtient toutes les ampoules du bâtiment 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'
Aucune sémantique OUTER JOIN
Les sémantiques OUTER JOIN
ne sont pas prises en charge, ce qui signifie que si la relation a un rang égal à zéro, la « ligne » entière sera éliminée du jeu de résultats de sortie.
Exemple
Considérez la requête suivante illustrant la traversée d’un bâtiment.
SELECT Building, Floor
FROM DIGITALTWINS Building
JOIN Floor RELATED Building.contains
WHERE Building.$dtId = 'Building1'
Si Building1 ne contient aucun étage, cette requête renvoie un jeu de résultats vide (plutôt qu’une ligne avec une valeur pour Bâtiment et undefined
pour Étage).
Jumeaux requis
Les relations dans Azure Digital Twins ne peuvent pas être interrogées en tant qu’entités indépendantes. Vous devez également fournir des informations sur le jumeau source à partir duquel provient la relation. Cette fonction est incluse dans le cadre de l'utilisation JOIN
par défaut dans Azure Digital Twins via le mot clé RELATED
.
Les requêtes dotées d’une clause JOIN
doivent également filtrer par propriété $dtId
de jumeau dans la clause WHERE
afin de clarifier le ou les jumeaux utilisés pour prendre en charge la requête de relation.