通過表達式或篩選器節點解析源節點數據后,可使用相鄰消息計算節點,取當前消息的某個數值字段的值(僅支持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。
下面為以“應用場景”為例的一個具體配置:
單擊數據解析工作臺右上角的保存,完成相鄰消息計算節點的配置。
重要該節點的輸出字段為已設置的結果字段名和上一節點的輸出字段。
后續操作
配置完相鄰消息計算節點后,您可以繼續配置其他處理節點,也可以配置目標節點完成整個解析任務配置。