NiFi:如何从第一列获取最大时间戳?

时间:2019-04-04 04:57:37

标签: apache-nifi

NiFi 1.5版

我有一个csv文件第一次到达:

datetime,a.DLG,b.DLG,c.DLG
2019/02/04 00:00,86667,98.5,0
2019/02/04 01:00,86567,96.5,0

使用列表文件-> fetchfile来获取csv文件。

接下来的10分钟,我将附加csv文件:

datetime,a.DLG,b.DLG,c.DLG
2019/02/04 00:00,86667,98.5,0
2019/02/04 01:00,86567,96.5,0
2019/02/04 02:00,86787,99.5,0
2019/02/04 03:00,86117,91.5,0

在这里,我们如何只需要单独获取新记录(最后两个记录)。我不想处理已经处理过的前两个记录。

我的想法是,我们需要获取最大的日期时间来存储在属性中并使用QueryRecord。但是我不知道如何使用哪个处理器来获得最大的日期时间。

有没有更好的解决方案。

3 个答案:

答案 0 :(得分:1)

这是目前尚待解决的问题(NIFI-6047),但是社区对此做出了贡献,因此您可能会在即将发布的NiFi版本中看到DetectDuplicateRecord处理器。

可能存在一种解决方法,将CSV行拆分并使用ExtractText,然后使用DetectDuplicate创建复合键。

答案 1 :(得分:0)

在Nifi上似乎并不是最好的解决方案,因为您需要保持已处理状态的状态。另一种选择是让您删除已处理的内容。然后,您可以假定文件中的内容始终不会被处理。

答案 2 :(得分:0)

  

在这里,我们如何只需要单独获取新记录(最后两个记录)。   我不想处理已经存在的前两个记录   已处理。

据我了解,实际的问题是“如何在写入文件时处理/记录csv行?”。

NiFi documentation中对“ TailFile”处理器的描述:

  

“尾部”文件或文件列表,从文件中提取数据   被写入文件。该文件应该是文本文件。数据是   仅在遇到新行时才提取(回车或   换行符或组合)

当您不想移动/删除实际文件时,此解决方案是合适的。