Справка по языку запросов Azure Digital Twins: предложение JOIN
Этот документ содержит справочные сведения о предложении JOIN для языка запросов Azure Digital Twins.
Предложение JOIN
используется в языке запросов Azure Digital Twins в качестве предложения FROM, когда требуется выполнить запрос на обход графа Azure Digital Twins.
Это предложение является необязательным для запроса.
Базовый синтаксис: JOIN...RELATED
Так как связи в 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
, чтобы уточнить, какой двойник (двойники) используется для поддержки запроса связи.