你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure 数字孪生查询语言参考:JOIN 子句
本文档包含有关 Azure 数字孪生查询语言 JOIN 子句的参考信息。
如果希望进行查询以遍历 Azure 数字孪生图,可在 Azure 数字孪生查询语言中使用 JOIN
子句作为 FROM 子句的一部分。
在查询时,此子句为可选项。
核心语法:与 JOIN...相关
由于 Azure 数字孪生中的关系属于数字孪生体,而不是独立实体,因此,可在 JOIN
查询中使用 RELATED
关键字,以从孪生体集合引用特定类型的关系集(类型是使用关系的 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>'
示例
以下查询通过 contains
关系,选择与 ID 为 ABC
的孪生体相关的所有数字孪生体。
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>
示例
以下查询基于包含 LightPanel 的 Room,每个 LightPanel 包含多个 LightBulb。 该查询将获取房间 1 和 2 的 LightPanel 中包含的所有 LightBulb。
SELECT LightBulb
FROM DIGITALTWINS Room
JOIN LightPanel RELATED Room.contains
JOIN LightBulb RELATED LightPanel.contains
WHERE Room.$dtId IN ['room1', 'room2']
限制
以下限制适用于使用 JOIN
的查询。
有关详细信息,请参阅以下部分。
深度限制为 5
图形遍历深度限制为每个查询五个 JOIN
级别。
示例
以下查询说明了 Azure 数字孪生查询中可以使用的最大 JOIN
子句数。 该查询可获取 Building1 中的所有 LightBulb。
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 数字孪生中的关系作为独立实体进行查询;还需要提供有关关系来源的源孪生体的信息。 在 Azure 数字孪生中,此功能是通过 RELATED
关键字纳入到 默认 JOIN
用法中。
具有 JOIN
子句的查询还必须按 WHERE
子句中任何孪生体的 $dtId
属性进行筛选,以明确可用于支持关系查询的孪生体。