你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure 数字孪生查询语言参考:JOIN 子句

本文档包含有关 Azure 数字孪生查询语言 JOIN 子句的参考信息。

如果希望进行查询以遍历 Azure 数字孪生图,可在 Azure 数字孪生查询语言中使用 JOIN 子句作为 FROM 子句的一部分。

在查询时,此子句为可选项。

由于 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 属性进行筛选,以明确可用于支持关系查询的孪生体。