Partager via


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.

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.