【发布时间】:2021-11-06 07:50:42
【问题描述】:
我使用的是 NiFi 1.9.2
我正在阅读一个文本文件,它恰好是一个 csv 文件。我在 flowFile 的内容中有文件的内容。
内容是
a,b,c
d,e,f
g,h,i
我想在流文件中的所有记录前面加上一个行号并获取
1,a,b,c
2,d,e,f
3,g,h,i
每次我通过这个处理器输入文件时
我可以通过使用带有以下属性的 ReplaceText 处理器来实现一些接近的目标:
Search Value : (?m)(^.*$)
Replacement Value : ${nextInt()},$1
但是因为 nextInt() 在我得到的运行 NiFi 实例的整个生命周期内都保持它的价值
0,a,b,c
1,d,e,f
2,g,h,i
for 1st execution
3,a,b,c
4,d,e,f
5,g,h,i
for the next execution etc
此外,根据 NiFi 表达式语言指南,“计数器在所有 NiFi 组件之间共享,因此从一个处理器多次调用此函数将不能保证特定处理器上下文中的顺序值。”
-
有没有办法确保在 NiFi 实例的生命周期内每次执行此处理器的行号始终从 0 开始,并且始终是连续的?
-
计数器的范围是多少?
-
我可以让计数器从 1 开始吗?
【问题讨论】:
-
您可以尝试 -
ExecuteScript或UpdateAttribute来维护计数器变量的本地状态,请参阅此 - nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/… -
谢谢@VikramsinhShinde。这些处理器对于在 flowFile-by-flowFile 基础上执行操作非常有用。我想对 flowFile 中的单个记录执行操作。我可以很容易地用 Java 编写一个自定义处理器,但首选是尝试开箱即用的 NiFi 解决方案。
-
我已经编写了一个自定义脚本来实现这个用例。我还没有遇到任何其他解决方案。
-
谢谢@Mallik。我也这样做了——用 Java 编写了一个自定义处理器。
标签: apache-nifi