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 的 deviceIdassetId 唯一标识。

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

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

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

时序模型实例示例

实例属性

实例由 timeSeriesIdtypeIdnamedescriptionhierarchyIdsinstanceFields 定义。 每个实例只映射到一个类型以及一个或多个层次结构。

属性 说明
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 代环境中配置多个层次结构。 一个时序模型实例可以映射到一个或多个层次结构(多对多的关系)。

时序模型层次结构示例

层次结构定义

层次结构由层次结构的 idnamesource 定义。

属性 说明
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 包含 buildingfloorroom 作为其 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 属性

时序模型类型由 idnamedescriptionvariables 定义。

属性 说明
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)"
          }
        }
      }
    }
  ]
}

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

后续步骤