在过去的几个月中,我一直在与Apache-NiFi一起工作。在此期间,我主要使用csv
基于操作的操作。
最近,我遇到以下情况的问题。
在我的文章中flowfile
,我需要对regex
列值进行运算,并用其他一些代码“替换”它们。我使用replaceAll
函数轻松地做到了这一点。
首先,让我们看一下replaceAll
Apache-NiFi中的功能。它带有两个字符串参数,第一个是a regex
,第二个是替换值。
有关更多详细信息,我强烈建议阅读关于replaceAll的Apache-NiFi表达式语言指南。
对于第一次尝试,我在使用UpdateRecord
processor的列中使用了以下语法:
$ {字段。值:replaceAll($ {字段。值:长度():le(8)},“未定义”):replaceAll('[az] +','错误')}
这首先检查列值的长度是否小于8个字符。如果是这样,它将替换为Undefined
。但是,某些与[a-z]+
pattern匹配的数据已被替换为Wrong
,即使它们少于8个字符。
我试图自己解决此问题,由于花费了太多时间,我问了StackOverflow社区。Lamanus的回答使我想到了ifElse
Apache-NiFi。
现在,让我们来看一下Apache-NiFi的 ifElse
行为。它有两个参数,但不同之处在于,其结果基于Subject
表达式。
如果是主题true
,则评估第一个参数,否则评估第二个。
如示例所示:${bool:ifElse('a','b')}
,这bool
是正确的。因此,如果我使用replaceAll
此值,则该值将替换为a
。福州小程序开发
为了使用此脚本,我必须更改逻辑,方法是检查它是否包含8个以上的字符,然后应用regex
基于自定义的操作。
$ {字段。value:长度():ge(8):ifElse(
$ {字段。值:replaceAll(' [ a - z ] + ','Wrong')
:replaceAll('[0-9] [az] +','Variable1')
,$ {字段。值:replace($ {字段。值},“未定义”)}
//这是值长度小于8个字符时执行的语句。)}
我希望这个简短的描述可以使您更好地了解如何ifElse
在Apache-NiFi中使用。