Поделиться через


Справка по языку запросов Azure Digital Twins: предложение JOIN

Этот документ содержит справочные сведения о предложении JOIN для языка запросов Azure Digital Twins.

Предложение JOIN используется в языке запросов Azure Digital Twins в качестве предложения FROM, когда требуется выполнить запрос на обход графа Azure Digital Twins.

Это предложение является необязательным для запроса.

Так как связи в Azure Digital Twins являются частью цифровых двойников, а не независимых сущностей, RELATED ключевое слово используется в JOIN запросах для ссылки на набор связей определенного типа из коллекции двойников (тип указывается с помощью поля связи name из определения DTDL). Этому набору связей можно присвоить имя коллекции в запросе.

Затем запрос должен использовать предложение WHERE для указания того, какой именно двойник или двойники используются для поддержки запроса связи, что выполняется с помощью фильтрации значения $dtId исходного или целевого двойника.

Синтаксис

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

Пример

Следующий запрос выбирает все цифровые двойники, связанные с двойником с идентификатором ABC через contains связь.

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

Несколько предложений JOIN

В одном запросе поддерживается до пяти предложений JOIN, что позволяет одновременно обходить несколько уровней связей.

Синтаксис

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

Пример

Следующий запрос основан на комнатах, где есть LightPanels, а в каждой LightPanel есть несколько LightBulbs. Запрос получает данные о всех LightBulbs, содержащихся в LightPanels комнат 1 и 2.

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

Ограничения

Следующие ограничения применяются к запросам с помощью JOIN.

Дополнительные сведения приведены в следующем разделе.

Ограничение глубины — 5

Глубина обхода графа ограничена пятью уровнями JOIN на запрос.

Пример

Ниже показано максимальное число возможных предложений JOIN в запросе к службе Azure Digital Twins. Он получает все лампочки в здании 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'

Отсутствие семантики OUTER JOIN

Семантика OUTER JOIN не поддерживается. Это значит, что при нулевом ранге связи из выходного результирующего набора удаляется вся "строка".

Пример

Рассмотрим следующий запрос, демонстрирующий обход здания.

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

Если в Building1 нет этажей, в результате этого запроса вы получите пустой результирующий набор (вместо строки со значением для Building и undefined для Floor).

Необходимы двойники

Связи в Azure Digital Twins нельзя запрашивать как независимые сущности. Кроме того, необходимо предоставить сведения об исходном двойнике, из которого происходит связь. Эта функциональность входит в использование JOIN по умолчанию в Azure Digital Twins с помощью ключевого слова RELATED.

Запросы с предложением JOIN также должны выполнять фильтрацию по любому свойству двойника $dtId в предложении WHERE, чтобы уточнить, какой двойник (двойники) используется для поддержки запроса связи.