Azure 时序见解第 2 代中的时序模型

注意

时序见解服务将于 2024 年 7 月 7 日停用。 请考虑尽快将现有环境迁移到备用解决方案。

本文介绍时序模型及其功能,以及如何在 Azure 时序见解第 2 代环境中开始生成和更新自己的模型。

提示

摘要

一直以来,从 IoT 设备收集的数据缺少上下文信息,以致难以快速查找和分析传感器。 时序模型的主要动机是简化 IoT 或时序数据的查找和分析。 为了实现此目标,它会启用时序数据的策划、维护和扩充,以帮助准备随时可供使用的分析数据集。

方案:Contoso 的新智能烤箱

下面虚构了一个 Contoso 智能烤箱的场景。 在此场景中,假设每部 Contoso 智能烤箱有五个温度传感器,顶部的四个电热丝各配有一个传感器,烤箱本体配有一个传感器。 每个 Contoso 温度传感器单独发送、存储和可视化到目前为止的数据。 Contoso 依赖使用基本图表来监视其厨房电器,每个图表对应于一个传感器。

尽管 Contoso 对其最初的数据和可视化解决方案感到满意,但有几处限制也不容忽视:

  • 客户想要知道,当顶部的大部分电热丝都打开时,整个烤箱的温度会有多高。 在整个烤箱的工作状况方面,Contoso 很难进行分析并提供统一的答案。
  • Contoso 工程师希望验证在顶部的电热丝同时工作时,会不会导致用电效率下降。 很难通过交叉参考来确定哪些温度和电压传感器彼此关联,以及如何在存储中定位这些传感器。
  • Contoso 质量保证团队希望审核并比较两个传感器版本之间的历史记录。 难以确定哪些数据属于哪个传感器版本。

由于不能构建、组织和定义统括式的智能烤箱时序模型,每个温度传感器都会保留失位、隔离且参考价值不大的数据点。 由于每个数据集相互独立,更难以将这些数据点转化为可行的见解。

这些限制揭示了随 Contoso 的新烤箱附送智能数据聚合与可视化工具的重要性:

  • 如果能够将数据关联且合并一个可方便查看的视图,则可以证明数据可视化的作用。 例如,将电压传感器与温度传感器一起显示。
  • 既要管理多个实体的多维数据,同时又要提供比较、缩放和时间范围功能,可能很难实现。

时序模型为此虚构示例中出现的许多场景提供一个便利的解决方案:

时序模型智能烤箱图表示例

  • 时序模型在查询和导航中起着至关重要的作用,因为它允许跨时间范围以及在传感器与设备类型之间绘制比较比较,因此可将数据上下文化。 (A)
  • 数据之所以能够进一步上下文化,是因为时序模型中保存的数据将时序查询计算结果作为变量保留,并在查询时重新使用这些结果。
  • 时序模型对数据进行组织与聚合,以改进可视化和管理功能。 (B)

关键功能

时序模型的目标是让用户毫不费力地管理时序上下文化,时序模型在 Azure 时序见解第 2 代中可以实现以下功能。 它可以帮助你:

  • 利用标量函数、聚合操作等创作和管理计算或公式。
  • 定义父子关系以实现导航、搜索和引用。
  • 定义与实例(定义为实例字段)关联的属性,并使用这些属性来创建层次结构。

组件

时序模型包括三个核心组件:

组合这些组件可以指定时序模型,并可以组织数据。

时序模型概述图表

可以通过 Azure 时序见解资源管理器来创建和管理时序模型。 可以通过模型设置 API 来管理时序模型设置。

时序模型实例

时序模型实例是时序本身的虚拟表示形式。

在大多数情况下,实例由保存为时序 ID 的 deviceId 或 assetId 唯一标识。

实例具有与自身关联的、称作“实例属性”的描述性信息,例如时序 ID、类型、名称、说明、层次结构和实例字段。 实例属性最起码包括层次结构信息。

实例字段是描述性信息的集合,可包含层次结构级别的值,以及制造商、运营商等信息。

为 Azure 时序见解第 2 代环境配置事件源后,会在时序模型中自动发现和创建实例。 可以使用时序模型查询通过 Azure 时序见解资源管理器来创建或更新实例。

时序模型实例示例

实例属性

实例由 timeSeriesId、typeId、name、description、hierarchyIds 和 instanceFields 定义。 每个实例只映射到一个类型以及一个或多个层次结构。

属性 说明
timeSeriesId 与实例关联的时序的唯一 ID。 在大多数情况下,实例由诸如 deviceId 或 assetId 等属性唯一标识。 在某些情况下,可以使用组合了最多 3 个属性的更具体的复合 ID。
typeId 与实例关联的时序模型类型的区分大小写的唯一字符串 ID。 默认情况下,所有已发现的新实例都会关联到默认类型。
name name 属性可选,区分大小写。 如果未提供 name,则默认值为 timeSeriesId。 如果提供了名称,仍然可以在 well 中使用 timeSeriesId。
description 实例的文本说明。
hierarchyIds 定义实例所属的层次结构。
instanceFields 实例的属性,并且是定义实例的任何静态数据。 它们定义层次结构或非层次结构属性的值,同时还支持索引,以便能够执行搜索操作。

注意

层次结构是使用实例字段生成的。 可为其他实例属性定义添加更多的 instanceFields。

实例具有以下 JSON 表示形式:

{
  "timeSeriesId": ["PU2"],
  "typeId": "545314a5-7166-4b90-abb9-fd93966fa39b",
  "hierarchyIds": ["95f0a8d1-a3ef-4549-b4b3-f138856b3a12"],
  "description": "Pump #2",
  "instanceFields": {
    "Location": "Redmond",
    "Fleet": "Fleet 5",
    "Unit": "Pump Unit 3",
    "Manufacturer": "Contoso",
    "ScalePres": "0.54",
    "scaleTemp": "0.54"
  }
}

提示

有关实例 API 创建、读取、更新和删除 (CRUD) 支持,请阅读数据查询一文和实例 API REST 文档。

时序模型层次结构

时序模型层次结构通过指定属性名称及其关系来组织实例。

可以在给定的 Azure 时序见解第 2 代环境中配置多个层次结构。 一个时序模型实例可以映射到一个或多个层次结构(多对多的关系)。

时序模型层次结构示例

层次结构定义

层次结构由层次结构的 id、name 和 source 定义。

属性 说明
id 层次结构的唯一标识符,例如,在定义实例时使用。
name 用于提供层次结构名称的字符串。
source 指定组织的层次结构或路径,即,用户想要创建的层次结构的自上而下的父子顺序。 父子属性映射实例字段。

层次结构的 JSON 表示形式如下:

{
  "hierarchies": [
    {
      "id": "6e292e54-9a26-4be1-9034-607d71492707",
      "name": "Location",
      "source": {
        "instanceFieldNames": [
          "state",
          "city"
        ]
      }
    },
    {
      "id": "a28fd14c-6b98-4ab5-9301-3840f142d30e",
      "name": "ManufactureDate",
      "source": {
        "instanceFieldNames": [
          "year",
          "month"
        ]
      }
    }
  ]
}

在上面的 JSON 示例中:

  • Location 定义包含父级 states 和子级 cities 的层次结构。 每个 location 可以包含多个 states,而后者又可以包含多个 cities。
  • ManufactureDate 定义包含父级 year 和子级 month 的层次结构。 每个 ManufactureDate 可以包含多个 years,而后者又可以包含多个 months。

提示

有关层次结构 API 创建、读取、更新和删除 (CRUD) 支持,请阅读数据查询一文和层次结构 API REST 文档。

层次结构示例

假设层次结构 H1 包含 building、floor 和 room 作为其 instanceFieldNames 定义的一部分:

{
  "id": "aaaaaa-bbbbb-ccccc-ddddd-111111",
  "name": "H1",
  "source": {
    "instanceFieldNames": [
      "building",
      "floor",
      "room"
    ]
  }
}

根据上述定义和多个时序中使用的实例字段,层次结构属性和值将如下表中所示:

时序 ID 实例字段
ID1 "building" = "1000", "floor" = "10", "room" = "55"
ID2 "building" = "1000", "room" = "55"
ID3 "floor" = "10"
ID4 "building" = "1000", "floor" = "10"
ID5 “building”、“floor”和“room”均未设置。

时序 ID1 和 ID4 在 Azure 时序见解资源管理器中显示为层次结构 H1 的一部分,因为它们包含已完全定义且正确排序的 building、floor 和 room 参数。

其他 ID 分类到“无父实例”下,因为它们不符合指定的数据层次结构。

时序模型类型

时序模型类型可帮助你定义用于执行计算的变量或公式。 类型与某个特定实例关联。

一个类型可以包含一个或多个变量。 例如,某个时序模型实例的类型为“温度传感器”,其中包括变量“平均温度”、“最小温度”和“最大温度”。

时序模型类型示例

提示

有关类型 API 创建、读取、更新和删除 (CRUD) 支持,请阅读数据查询一文和类型 API REST 文档。

Type 属性

时序模型类型由 id、name、description 和 variables 定义。

属性 说明
id 类型的区分大小写的唯一字符串 ID。
name 用于提供类型名称的字符串。
description 类型的字符串说明。
variables 指定与类型关联的变量。

类型符合以下 JSON 示例:

{
  "types": [
    {
      "id": "1be09af9-f089-4d6b-9f0b-48018b5f7393",
      "name": "DefaultType",
      "description": "Default type",
      "variables": {
        "EventCount": {
          "kind": "aggregate",
          "value": null,
          "filter": null,
          "aggregation": {
            "tsx": "count()"
          }
        },
        "Interpolated Speed": {
          "kind": "numeric",
          "value": {
              "tsx": "$event['Speed-Sensor'].Double"
          },
          "filter": null,
          "interpolation": {
              "kind": "step",
              "boundary": {
                  "span": "P1D"
              }
          },
          "aggregation": {
              "tsx": "right($value)"
          }
        }
      }
    }
  ]
}

时序模型类型可以有多个变量,这些变量指定事件的公式和计算规则。 请阅读有关如何定义时序模型变量的详细信息

后续步骤