Referência da linguagem de consulta do Azure Digital Twins: cláusula JOIN

Este documento contém informações de referência sobre a cláusula JOIN para a linguagem de consulta do Azure Digital Twins.

A JOIN cláusula é utilizada na linguagem de consulta do Azure Digital Twins como parte da cláusula FROM quando pretender consultar para percorrer o grafo do Azure Digital Twins.

Esta cláusula é opcional durante a consulta.

Uma vez que as relações no Azure Digital Twins fazem parte de duplos digitais e não de entidades independentes, a RELATED palavra-chave é utilizada em JOIN consultas para referenciar o conjunto de relações de um determinado tipo da coleção de duplos (o tipo é especificado com o campo da relação da namedefinição DTDL). O conjunto de relações pode ser atribuído um nome de coleção na consulta.

Em seguida, a consulta tem de utilizar a WHERE cláusula para especificar que duplos ou duplos específicos estão a ser utilizados para suportar a consulta de relação, que é feita ao filtrar o valor do duplo de origem ou de $dtId destino.

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

Exemplo

A seguinte consulta seleciona todos os duplos digitais relacionados com o duplo com um ID de através de ABC uma contains relação.

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

Vários JOINs

Até cinco JOINs são suportados numa única consulta, o que permite o percurso de múltiplos níveis de relações ao mesmo tempo.

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>

Exemplo

A consulta seguinte baseia-se em Salas que contêm LightPanels e cada LightPanel contém várias Lâmpadas. A consulta obtém todas as Lâmpadas contidas nos LightPanels das salas 1 e 2.

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

Limitações

Os seguintes limites aplicam-se a consultas com JOIN.

Para obter mais informações, veja as secções seguintes.

Limite de profundidade de cinco

A profundidade transversal do gráfico está restrita a cinco JOIN níveis por consulta.

Exemplo

A seguinte consulta ilustra o número máximo de JOIN cláusulas que são possíveis numa consulta do Azure Digital Twins. Obtém todas as Lâmpadas no Edifício 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'

Sem semântica OUTER JOIN

OUTER JOIN A semântica não é suportada, o que significa que se a relação tiver uma classificação de zero, toda a "linha" é eliminada do conjunto de resultados de saída.

Exemplo

Considere a seguinte consulta que ilustra um percurso modular.

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

Se o Edifício1 não contiver pisos, esta consulta devolverá um conjunto de resultados vazio (em vez de devolver uma linha com um valor para Edifício e undefined para Piso).

Duplos necessários

As relações no Azure Digital Twins não podem ser consultadas como entidades independentes; também tem de fornecer informações sobre o duplo de origem de onde provém a relação. Esta funcionalidade está incluída como parte da utilização predefinida JOIN no Azure Digital Twins através da RELATED palavra-chave.

As consultas com uma JOIN cláusula também têm de filtrar pela propriedade de $dtId qualquer duplo na WHERE cláusula, para esclarecer quais os duplos que estão a ser utilizados para suportar a consulta de relação.