
# 相邻消息计算
**算子简介**
- 名称：相邻消息计算
- 功能说明：基于前一消息和当前消息，按照表达式进行数值计算，计算的结果赋值给当前输入消息的属性。 举例：消息中有上报机器的产品总产量，但没有相对上一个上报周期的增量产量。通过相邻消息计算算子，可以用本消息中的产品总量减去上一个消息中的产品总产量，得到的计算结果赋予一个新的属性，比如产品增量。那么经过本算子清洗后的消息中，都将携带产品增量属性了。
  
- 约束：下游不允许对接数据源及产品过滤算子。
**算子配置**
**基础配置项**
**算子名称：**
- 配置项英文名：name

- 说明：算子名称，对算子进行个性化的命名，以辅助增加可读性。支持中文、英文、数字、中划线、下划线，长度小于等于64个字符。
- 类型：STRING
- 必选：否
- 约束：需要符合正则表达式： \^\[\\u4E00-\\u9FA5A-Za-z0-9_-\]{1,64}$
**分区键：**
- 配置项英文名：partitionKeys
- 说明：分区键，用于作为消息分区/分组的标识，具体填入的内容为消息中获取的JSON Path，比如可以选择消息中设备ID所在的JSON Path。 设置后，拥有该分区键数值相同的所有消息会进入一个分区，比如分区键选择了设备ID后，那么相同设备ID的消息进入一个分区。当选择多个字段时，按指定字段顺序组合成的字符作为算子并行处理的分区的Key。相邻消息计算会针对每个分区中的消息单独作用；举例：1）选择将设备ID作为分区键，那么本算子会将相同设备ID的消息进行分区，然后进行相邻消息计算。比如设备ID为1的所有消息会进入一个分区，设备ID为2的所有消息会进入另一个分区，计算策略会审视每一个分区中的消息进行单独相邻消息计算； 2）选择消息中的设备ID与设备状态为分区键，那么相同设备ID与设备状态的消息会进入一个分区，然后进行单独的相邻计算。比如设备ID为1、设备状态为正常的所有消息会进入一个分区，设备ID为1、设备状态为异常的所有消息进入另一个分区，计算策略会审视每一个分区中的消息进行相邻消息计算。
- 类型：STRING
- 必选：是
- 约束：需要符合正则表达式： \^.{1,1000}$
**前一变量：**
- 配置项英文名：previousVariables
- 说明：前一变量，把前一条消息中的属性作为变量在表达式中使用。对变量进行定义，设置变量名称和变量的取值。
- 必选：是
- 子配置项：前一变量包括如下子配置项：变量名称、变量取值。
**变量名称：**
- 配置项英文名：variable
- 说明：变量名称，用户可自定义一个变量名称，计算时使用，以免以配置计算表达式时使用jsonPath。
- 类型：STRING
- 必选：是
- 约束：需要符合正则表达式： \^\[a-zA-Z\]\\w{0,20}$
**变量取值：**
- 配置项英文名：value
- 说明：取值内容，以JSON Path格式来指定变量从消息中指定的JSON Path属性获取的取值。
- 类型：STRING
- 必选：是
- 约束：需要符合正则表达式： \^.{0,1000}$
**当前变量：**
- 配置项英文名：variables
- 说明：当前变量，把输入消息中的属性作为变量在表达式中使用。对变量进行定义，设置变量名称和变量的取值。
- 必选：是
- 子配置项：variables包括如下子配置项：变量名称、变量取值。
**变量名称：**
- 配置项英文名：variable
- 说明：变量名称，用户可自定义一个变量名称，计算时使用，以免以配置计算表达式时使用jsonPath。
- 类型：STRING
- 必选：是
- 约束：需要符合正则表达式： \^\[a-zA-Z\]\\w{0,20}$
**变量取值：**
- 配置项英文名：value
- 说明：取值内容，以JSON Path格式来指定变量从消息中指定的JSON Path属性获取的取值。
- 类型：STRING
- 必选：是
- 约束：需要符合正则表达式： \^.{0,1000}$
**计算表达式：**
- 配置项英文名：calculates
- 说明：以表达式来计算属性的值。
- 必选：是
- 子配置项：计算配置包括如下子配置项：属性、表达式。
**属性：**
- 配置项英文名：property
- 说明：属性名，表达式计算结果赋值给此属性，属性以JSON Path格式来表示，请填写JSON Path。。
- 类型：STRING
- 必选：是
- 约束：需要符合正则表达式： \^.{1,1000}$
**表达式：**
- 配置项英文名：expression
- 说明：计算表达式，支持的表达式详细说明请参考：[表达式说明](https://support.huaweicloud.com/usermanual-iotanalytics/iota_01_09712.html)。
- 类型：STRING
- 必选：是
- 约束：需要符合正则表达式： \^.{0,1000}$
**存活时长：**
- 配置项英文名：ttl
- 说明：存活时长，配置前一变量的存活时长。如果超过此时长没有接收到新的消息更新前一变量取值，则前一变量将被老化清除。存活时长的单位为秒，最小清除时间为1s，最大清除时间为30天，如果不设置此参数表示永远不清除。当算子每次接收了消息，更新延长存活时长。
- 类型：INTEGER
- 必选：否
- 约束：最小值1， 最大值 2592000，即30天。
**使用输出：**
- 配置项英文名：usingOutput
- 说明：使用输出，是以算子计算的输出消息来获取前一变量，还是算子输入的原始消息来获取前一变量。通过该参数的设置，实际控制了上一条消息的缓存策略，即缓存上一条消息的原始状态，还是缓存上一条消息经过相邻计算算子处理后的状态，默认为以算子计算更新后的输出消息来获取前一变量。算子输出消息会被表达式修改，会影响前一变量的取值。
- 类型：STRING
- 必选：否，默认为TRUE
- 约束：仅可填写TRUE 或 FALSE
**高级配置项**
**并行数**：
- 配置项英文名：parallelism

- 说明：并行数，指定算子执行时的并行任务个数。对于性能要求越高的算子，可以设置较高的并行数，但是占用资源越多。如果此参数不设置，那么作业运行时本算子使用作业的并行数设置。
- 类型：INTEGER
- 必选：否
- 约束：最小值1，最大值 1024。
 
