Referencia del lenguaje de consulta de Azure Digital Twins: cláusula JOIN

Este documento contiene información de referencia sobre la cláusula JOIN para el lenguaje de consulta de Azure Digital Twins.

La cláusula JOIN se usa en el lenguaje de consulta de Azure Digital Twins como parte de la cláusula FROM cuando se desea consultar para recorrer el grafo de Azure Digital Twins.

Esta cláusula es opcional durante la consulta.

Dado que las relaciones de Azure Digital Twins forman parte de gemelos digitales, no de entidades independientes, la palabra clave RELATED se usa en las consultas JOIN para hacer referencia al conjunto de relaciones de un tipo determinado de la colección de gemelos (el tipo se especifica mediante el campo name de la relación de su definición de DTDL). Al conjunto de relaciones se le puede asignar un nombre de colección dentro de la consulta.

A continuación, la consulta debe usar la cláusula WHERE para especificar qué gemelo o gemelos específicos se usan para admitir la consulta de relación, que se realiza mediante el filtrado por el valor $dtId del gemelo de origen o de destino.

Sintaxis

--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>'

Ejemplo

La consulta siguiente selecciona todos los gemelos digitales que están relacionados con el gemelo con un identificador de ABC a través de una relación contains.

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

Varias cláusulas JOIN

Se admiten hasta cinco cláusulas JOIN en una sola consulta, lo que permite el recorrido de varios niveles de relaciones a la vez.

Sintaxis

--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>

Ejemplo

La consulta siguiente se basa en objetos Room que contienen elementos LightPanel, y cada elemento LightPanel contiene varios elementos LightBulb. La consulta obtiene todos los elementos LightBulb de los elementos LightPanel de los objetos room1 y room2.

SELECT LightBulb
FROM DIGITALTWINS Room
JOIN LightPanel RELATED Room.contains
JOIN LightBulb RELATED LightPanel.contains
WHERE Room.$dtId IN ['room1', 'room2']

Limitaciones

Los límites siguientes se aplican a las consultas que usan la cláusula JOIN.

Para más información, consulte las siguientes secciones:

Límite de profundidad de cinco

La profundidad transversal del grafo está restringida a cinco niveles JOIN por consulta.

Ejemplo

En la consulta siguiente se muestra el número máximo de cláusulas JOIN posibles en una consulta de Azure Digital Twins. Obtiene todos los elementos LightBulb de 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'

Sin semántica OUTER JOIN

No se admite la semántica OUTER JOIN, lo que significa que, si la relación tiene un rango de cero, se elimina toda la "fila" del conjunto de resultados de salida.

Ejemplo

Considere la posibilidad de utilizar la siguiente consulta, que ilustra un recorrido del edificio.

SELECT Building, Floor
FROM DIGITALTWINS Building
JOIN Floor RELATED Building.contains
WHERE Building.$dtId = 'Building1'

Si Building1 no contiene ninguna planta, esta consulta devolverá un conjunto de resultados vacío (en lugar de devolver una fila con un valor para Building y undefined para Floor).

Gemelos necesarios

Las relaciones en Azure Digital Twins no se pueden consultar como entidades independientes; también debe proporcionar información sobre el gemelo de origen del que procede la relación. Esta funcionalidad se incluye como parte del uso de JOIN predeterminado en Azure Digital Twins a través de la palabra clave RELATED.

Las consultas con una cláusula JOIN también deben filtrar por la propiedad $dtId de cualquier gemelo de la cláusula WHERE, a fin de aclarar qué gemelos se usan para admitir la consulta de relación.