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

Azure 数据资源管理器的 Azure 数字孪生查询插件

本文介绍 Azure 数据资源管理器的 Azure 数字孪生查询插件、如何将 Azure 数据资源管理器 IoT 数据用于 Azure 数字孪生、如何跨 Azure 数据资源管理器和 Azure 数字孪生映射数据等内容。

使用 Azure 数据资源管理器的 Azure 数字孪生插件,你可以运行可跨 Azure 数字孪生图形和 Azure 数据资源管理器时序数据库访问和合并数据的 Azure 数据资源管理器查询。 使用此插件,根据数字孪生及其关系进行推理来情景化不同的时序数据,从而深入了解建模环境的行为。

例如,借助此插件,可以编写 Kusto 查询,该查询可以:

  1. 通过 Azure 数字孪生查询插件选择感兴趣的数字孪生,
  2. 根据 Azure 数据资源管理器中各自的时序加入这些孪生,然后
  3. 对这些孪生执行高级时序分析。

将 Azure 数字孪生的孪生图形中的数据与 Azure 数据资源管理器中的时序数据组合在一起,可帮助你了解解决方案的各个部分的操作行为。

使用插件

可以使用以下命令在 Kusto 查询中调用插件。 有两个占位符:<Azure-Digital-Twins-endpoint><Azure-Digital-Twins-query>,分别是代表 Azure 数字孪生实例终结点和 Azure 数字孪生查询的字符串。

evaluate azure_digital_twins_query_request(<Azure-Digital-Twins-endpoint>, <Azure-Digital-Twins-query>) 

插件的工作原理是调用 Azure 数字孪生查询 API查询语言结构与使用 API 时相同,但有两种例外情况:

  • 不支持 SELECT 子句中的 * 通配符。 相反,使用插件执行的 Azure 数字孪生查询应在 SELECT 子句中使用别名。

    例如,考虑以下使用 API 执行的 Azure 数字孪生查询:

    SELECT * FROM DIGITALTWINS
    

    若要在使用插件时执行该查询,应对其进行重写,如下所示:

    SELECT T FROM DIGITALTWINS T
    
  • 插件返回的列名不得以 $ 开头。 在 SELECT 子句中使用别名还有助于避免这种情况。

    例如,考虑以下使用 API 执行的 Azure 数字孪生查询:

    SELECT T.$dtId, T.Temperature FROM DIGITALTWINS T
    

    若要在使用插件时执行该查询,应对其进行重写,如下所示:

    SELECT T.$dtId as tid, T.Temperature FROM DIGITALTWINS T
    

重要

必须向插件的用户授予“Azure 数字孪生数据读取者”角色或“Azure 数字孪生数据所有者”角色,因为用户的 Microsoft Entra 令牌用于进行身份验证。 可以在 Azure 数字孪生解决方案的安全性中找到有关如何分配此角色的信息。

有关如何使用插件的详细信息,请参阅 azure_digital_twins_query_request 插件的 Kusto 文档

若要查看示例查询并使用示例数据完成演练,请参阅 GitHub 中的 Azure 数据资源管理器的 Azure 数字孪生查询插件:示例查询和演练

将 Azure 数字孪生数据引入 Azure 数据资源管理器中

使用插件进行查询之前,需要将 Azure 数字孪生数据引入 Azure 数据资源管理器中。 可以通过两种主要方法实现此目的:通过“数据历史记录”功能,或通过直接引入。 以下各部分更详细地说明了这些选项。

使用数据历史记录进行引入

将 IoT 数据从 Azure 数字孪生引入 Azure 数据资源管理器的最简单方法就是使用“数据历史记录”功能。 使用此功能可以设置 Azure 数字孪生实例与 Azure 数据资源管理器群集之间的连接,并且图形更新(包括孪生属性更新、孪生生命周期事件和关系生命周期事件)会自动记录到群集中。 如果你使用设备遥测数据来恢复数字孪生,则这是一个不错的选择。 有关此功能的详细信息,请参阅数据历史记录(通过 Azure 数据资源管理器)

直接引入

你还可以选择从 IoT 中心或其他源将 IoT 数据直接引入到 Azure 数据资源管理器群集中。 然后,Azure 数字孪生图形将用于通过联合 Azure 数字孪生/Azure 数据资源管理器查询情景化时序数据。 对于直接引入工作负载,此选项是一个不错的选择 - 但是,你将无法利用 Azure 数字孪生基于事件的体系结构来更新其他孪生、触发下游服务或在孪生更改状态时发出通知。 若要详细了解此过程,请继续完成本部分的其余部分。

跨 Azure 数据资源管理器和 Azure 数字孪生映射数据

如果将时序数据直接引入到 Azure 数据资源管理器中,则可能需要将此原始时序数据转换为适用于联合 Azure 数字孪生/Azure 数据资源管理器查询的架构。

每当将新数据插入源表时,Azure 数据资源管理器中的更新策略都会允许你自动将数据转换并追加到目标表中。

如果设备遥测数据中的传感器 ID 与 Azure 数字孪生中的对应孪生 ID 不同,则你可以使用更新策略通过孪生 ID 来扩充原始时序数据,并将其保存到目标表。 使用孪生 ID,可以将目标表与 Azure 数字孪生插件选择的数字孪生联接。

例如,假设你创建了下表来保存流入 Azure 数据资源管理器实例的原始时序数据。

.create-merge table rawData (Timestamp:datetime, someId:string, Value:string, ValueType:string)  

可以创建一个映射表,将时序 ID 与孪生 ID 和其他可选字段相关联。

.create-merge table mappingTable (someId:string, twinId:string, otherMetadata:string) 

然后,创建一个目标表来保存扩充的时序数据。

.create-merge table timeseriesSilver (twinId:string, Timestamp:datetime, someId:string, otherMetadata:string, ValueNumeric:real, ValueString:string)  

接下来,创建函数 Update_rawData,通过将原始数据与映射表联接来扩充原始数据。 这样做会将孪生 ID 添加到生成的目标表中。

.create-or-alter function with (folder = "Update", skipvalidation = "true") Update_rawData() { 
rawData 
| join kind=leftouter mappingTable on someId 
| project 
    Timestamp, ValueNumeric = toreal(Value), ValueString = Value, ... 
} 

最后,创建更新策略来调用函数并更新目标表。

.alter table timeseriesSilver policy update 
@'[{"IsEnabled": true, "Source": "rawData", "Query": "Update_rawData()", "IsTransactional": false, "PropagateIngestionProperties": false}]' 

创建目标表后,可以使用 Azure 数字孪生插件来选择相关孪生,然后将其与目标表中的时序数据联接。

示例架构

下面是一个可用于表示共享数据的架构示例。 该示例遵循 Azure 数据资源管理器孪生属性更新的数据历史记录架构

TimeStamp SourceTimeStamp TwinId ModelId Name Value RelationshipTarget RelationshipID
2021-02-01 17:24 2021-02-01 17:11 ConfRoomTempSensor dtmi:com:example:TemperatureSensor;1 温度 301.0

数字孪生属性以键值对 (name, value) 的形式存储。 namevalue 存储为动态数据类型。

该架构还支持根据 relationshipTargetrelationshipID 字段存储关系的属性。 键值架构无需为每个孪生属性创建列。

表示具有多个字段的属性

可能需要在架构中存储具有多个字段的属性。 通过在架构中将 JSON 对象存储为 value 来表示这些属性。

例如,如果想要表示具有三个字段(绕 Z 轴旋转、绕 X 轴旋转和绕 Y 轴旋转)的属性,则值对象将如下所示:{"roll": 20, "pitch": 15, "yaw": 45}

后续步骤