转换

制造数据引擎 (MDE) 提供了一种简单明了的方法,可在提取期间对消息进行后处理,并根据输入消息生成新的派生标记和记录。这些后处理程序称为“转换”。它们可以与给定类型相关联,并生成随后重新提取到 MDE 中的新消息。转换是内置的 Dataflow 流水线,可以使用某些特定的转换参数进行配置。

MDE 1.3 及更高版本提供两种默认转换:

  • 群组活动变更
  • 窗口化

转换是在类型级别激活的。这意味着,属于该类型的所有标记都将被转换。一种类型可以与零个、一个或多个转换相关联。您可以在网页界面中以及使用配置 API 设置类型与特定转换之间的关联。类型可以随时与转换相关联,并且在不再需要时也可以随时移除该关联。

转换可能需要转换参数来定义其具体行为。转换参数特定于每种转换类型,并且可能因转换而异。

给定转换的特定转换形参值也是在类型级别设置的。不同类型可以使用不同的形参值,并以不同的方式使用相同的转换

转换会接收所有映射到该类型的消息作为输入,前提是转换处于有效状态。每条消息都由 Dataflow 中的转换处理器进行处理。

任何转换的输出都是原始 JSON 消息,该消息会提取到初始着陆主题中。对于每项转换,MDE 都会提供一个独特的配置软件包。如果您打算使用转换,则需要将此配置软件包应用于 MDE。配置软件包会创建一组消息类解析器类型元数据桶集合。借助这些配置实体,MDE 可以识别和处理转换输出消息,并将其转换为特定类型。特定于转换的类型用于存储由转换发出的信息。它们还与存储有关原始转换后代码或记录的参考信息的特定转换元数据桶相关联。

以下是用于处理由每个转换生成的原始消息的两种类型

  • group-event-change-records群组事件更改转换的输出消息的目标类型。
  • window-transformation-records窗口化转换的输出消息的目标类型。

群组活动变更转换

转换会监控代码或代码组中的任何字段,并在任何受监控的代码中,受监控的值发生变化时生成事件。 此转换可与任何原型类型相关联。相应转换在网页界面中显示为 eventChange

转换会发出一条消息,该消息会被解析为相关联的配置软件包中提供的名为 group-event-change-records 的特定 CONTINUOUS_DATA_SERIES 类型。该类型包含值变化之间的时间段的开始时间结束时间,以及之前的值、当前值和触发更改的标记的名称。

您可以定义一组要一起监控的同类标记。您可以选择关键条件来定义如何对标记进行分组。 具有相同键值的所有标记都会一起受到监控。的值可以是标记 proto 的任何元素,包括任何数据字段和元数据的任何元素。

为了使转换适用于单个标记,设置为 TagName

参数

配置此转换所需的两个转换参数如下所示:

  1. 密钥表达式:在网页界面中显示为 keyExpression。定义用于对标记进行分组的表达式。所有具有相同键表达式值的标记都会一起受到监控。每当检测到任何这些标记发生变化时,转换都会发出值更改事件。这些值会与同一标记的之前值进行比较,但当任何标记发生变化时,系统都会触发事件。键表达式定义为 SpEL 表达式,可以使用标记 proto 中的任何可用字段。例如,若要仅根据标记名称监控单个标记,可将 SpEL 表达式定义为:

    #message['tagName']
    

    或者,如需根据通用元数据字段(例如机器名称)对标记进行分组(假设存在一个 asset-hierarchy 存储桶,其中包含一个名为 machine-name 的属性),可以将表达式设置为:

    #message['metadata']['asset-hierarchy']['machine-name']
    
  2. 值表达式:在网页界面中显示为 valueExpression。定义转换所监控的值字段,以发出新的更改事件。它还定义为 SpEL 表达式。表达式可以使用标记 proto 结构的任何字段。表达式的输出必须为 String 类型,才能正常运行。

    例如,如需监控标记 proto 的 Data 部分中的 value 字段,可以将值表达式设置为:

    #message['data']['numeric'].toString()
    

输出消息

分组事件更改转换生成的输出消息的内容提供了检测到的事件的详细信息。输出消息中可用的具体属性如下:

  1. TagName转换会在与键表达式的值和后缀 "_event_change" 对应的代码名称下创建一个事件。如果将键表达式定义为单个 TagName,则派生标记将为 "TagName_event_change"
  2. 事件更改连续时间戳对象:包含事件的初始时间戳(event_timestamp_start 属性)和最终时间戳(event_timestamp_end 属性)。它还包含事件的持续时间(duration 属性),以 double 形式表示。
  3. 事件更改消息数据对象:包含在事件期间值发生更改的标记的名称(changed_tags 属性)以及在发出事件时符合分组条件的标记的列表(contributing_tags 属性)。两者都可以包含每条消息的多个标记。
  4. 标记值更改对象:触发状态更改事件的名称(tag_name 属性)、旧值(old_expression_value 属性)、新值(new_expression_attribute 属性)和消息(message_id 属性)。
  5. 已更改的值消息对象(在 v1.3.6 及更高版本中):包含触发事件更改的消息。

请参阅参考部分中的具体架构。

窗口化转换

转换会将 Windowing 函数应用于某种类型的所有标记。窗口化是指将一段时间内的多条记录汇总为一条记录。窗口化转换可以与任何原型中的任何类型相关联。它可以总结 1 分钟到 60 分钟的标记记录。转换的结果是一条原始消息,其中包含所选时间段内价值表达式的汇总值。

只要每种窗口化转换ID(在其参数中定义)在该类型中是唯一的,就可以对同一类型多次应用此转换。您可以使用网页界面添加窗口化转换,但必须使用 API 才能向给定类型添加多个窗口化转换

转换会生成一个派生标记(名为 window-transformation-records),其中包含相应标记在相应时间窗口内收到的所有记录的摘要。此转换在代码级运行:它会为与该转换关联的每种类型的代码生成一个汇总代码。标记的名称由原始 Tagname、后缀 -window-stats窗口化转换id 组成。

参数

此转换需要三个参数才能运行:

  1. 窗口时长:在网页界面中显示为 durationMinutes。是指要应用的窗口时长(以分钟为单位)。例如,如果值为 1,则会生成分辨率为 1 分钟的派生时序。
  2. 窗口 ID:在网页界面中以 id 的形式提供。为相应类型的每个窗口化转换分配一个唯一标识符,以便并行应用多个窗口化转换。ID 可以是任何字符串。
  3. 价值表达式:在网页界面中显示为 valueExpression。它是应用于标记 proto 的 SpEL 表达式,用于生成将由窗口化转换进行汇总的数值。例如,如果您需要使用泛型数字标记的值字段,则可以将 valueExpression 的表达式定义为:

    #message['data']['numeric']
    

输出消息

转换会针对由转换参数 durationMinutes 定义的每个时间段发出一条消息。输出消息包含以下属性:

  1. TagName:派生时序的标记名称。它由 windowing 转换自动生成。它由原始 TagName、后缀 -window-stats开窗转换id 组成。例如,对于名为 Temperature 的 TagName 和 ID 1,派生标记将命名为 Temperature-window-stats-1
  2. TimeStamp:包含窗口的开始和结束时间戳(以 event_timestamp_startevent_timestamp_end 属性的形式提供)。
  3. 窗口摘要统计信息:包含相应时间段内的所有汇总数据,包括:
    1. 平均值:时间窗口内收到的所有值的平均值。
    2. 最小值:时间窗口内收到的所有值的最小值。
    3. 最大值:时间窗口内收到的所有值的最大值。
    4. 标准差:时间窗口内收到的所有值的标准差。
    5. p50:在时间窗口内收到的值不超过此值的置信度为 50%。
    6. p90:在相应时间窗口内收到的值不超过的概率为 90%。
    7. 总和:时间窗口内收到的所有值的汇总。
    8. 数量:在时间窗口内收到的值的数量。
    9. 增量:时间窗口内收到的最后一个值与第一个值之间的差值。

如需了解详情,请参阅转换架构部分中的具体架构。