Nifi记录最大时间戳

时间:2018-01-10 13:22:34

标签: apache-nifi

我在每个流文件中都有timestamp值,我需要将当前流文件的时间戳与之前的流文件进行比较,如果更大,则使用Put文件处理器将其写入文件,最后我需要拥有文件中的最大时间戳。我通过以下方式尝试使用更新属性处理器的高级功能:

添加了一个名为max_timestamp且条件为${getStateValue("maxTimestamp"):lt(${timestamp})}的规则,并为属性maxTimestamp as ${timestamp}

设置了操作

我还将存储状态功能设置为在处理器中本地存储,但是我没有看到maxTimestamp属性被设置为更新属性处理器的流文件输出。

1 个答案:

答案 0 :(得分:1)

  1. 使用UpdateAttribute处理器在状态模式下使用以下参数评估maxTimestamp属性:
  2. Store State                      : Store state locally
    Stateful Variables Initial Value : 0
    maxTimestamp                     : ${timestamp:toNumber():math("max",${getStateValue("maxTimestamp")})}
    

    表达式${timestamp:toNumber():math("max",${getStateValue("maxTimestamp")})}

    评估两个数字之间的最大值:

    当前flowFile中的

    timestamp属性, 和maxTimestamp

    的存储值

    属性Stateful Variables Initial Value : 0定义存储值maxTimestamp

    的默认值
    1. 然后使用RouteOnAttribute以下属性:
    2. Routing Strategy : Route to Property name
      less_then        : ${timestamp:lt(${maxTimestamp})}
      

      所以,你将有2个关系

      less_then表示timestamp小于maxTimestamp

      的情况 其他案件

      unmatched