通过表达式或筛选器节点解析源节点数据后,可使用相邻消息计算节点,取当前消息的某个数值字段的值(仅支持BIGINT、DOUBLE类型)与前一条消息的相同数值字段的值,按照定义的表达式进行计算,将计算的结果输出到定义的输出字段上。通过该节点计算生成多样化的数据,可用于后续分析或输出。
应用场景
智能电表每小时上报当前的历史累计用电量值,如果需要知道最近一小时的增量用电量(kwh),可以通过相邻消息计算节点输出本次上报电量减去前一次上报电量的值。
前提条件
已配置数据计算的表达式或数据过滤的筛选器,具体操作,请参见配置数据计算和数据过滤。
背景信息
操作步骤
在中间画布单击当前节点后的添加图标。
在弹出的节点列表中单击相邻消息计算节点。
在画布中单击相邻消息计算节点,在右侧配置面板,参照下表,配置相邻消息计算。
配置项
参数
说明
示例
基础配置
前一变量字段
选择前一条消息中数值型字段,使用对应值在表达式中进行计算。
表达式中固定以
${pre_var}
表示该字段的值。重要该字段仅支持使用上一节点输出字段中的数值类型(BIGINT、DOUBLE)字段。
以“应用场景”中电表场景为例:此处选择电量字段kwh。
当前变量字段
选择当前消息中数值型字段,使用对应值在表达式中进行计算。
表达式中固定以
${current_var}
表示该字段的值。重要该字段仅支持使用上一节点输出字段中的数值类型(BIGINT、DOUBLE)字段。
以电表场景为例:此处选择电量字段kwh。
结果字段名
自定义字段名称,相邻消息的计算结果会赋值到该字段进行输出。
仅支持数字、字母和下划线,不能以数字开头,不能和已有字段重合,长度不超过30个字符。
以电表场景为例:定义字段kwh_diff,表示每小时的增量用电量。
计算表达式
配置表达式计算前一变量字段和当前变量字段的值。
必须使用
${current_var}
和${pre_var}
分别指代当前变量字段的值与前一变量字段的值。此处支持四则运算和表达式节点中支持的所有函数,使用方法,请参见配置表达式。
以电表场景为例:如果需要求出每小时的增量用电量,可使用当前用电量上报值减去前一次用电量上报值。
计算表达式为:
${current_var} - ${pre_var}
。高级配置
消息分区键
可选,用来划分同一个Topic中的哪些字段消息需要划分到一起来进行相邻计算。
不设置时,物联网平台系统会默认将ProductKey和DeviceName作为消息分区键。
以电表场景为例:
同一个电表的上报消息中电量(kwh)需要相邻计算,此时消息分区键应该为电表的ProductKey和DeviceName,此时可以不填该字段。
如果电表的数据是通过一个大网关设备上报,电表设备的标志在消息里以deviceId字段表示,此时需要将deviceId设置为消息分区键,才能保证实际场景下的同一个电表的消息进行相邻计算。
消息存活时长
单位为秒,默认一天,最小1秒,最大30天。
如果超过此时长没有接收到新的消息更新前一变量字段的值,则前一变量字段会被清除。当节点每次接收了消息,更新存活时长。
如果前一变量字段由于太久之前上报,已经被清除,新上报的消息会被当作解析任务的第一条数据。对于第一条数据,默认不进行相邻消息计算,结果字段输出空值。
以电表场景为例:使用默认值86400。
下面为以“应用场景”为例的一个具体配置:
单击数据解析工作台右上角的保存,完成相邻消息计算节点的配置。
重要该节点的输出字段为已设置的结果字段名和上一节点的输出字段。
后续操作
配置完相邻消息计算节点后,您可以继续配置其他处理节点,也可以配置目标节点完成整个解析任务配置。