如何在Apache-NiFi中使用ifElse?

在过去的几个月中,我一直在使用Apache-NiFi。 在此期间,我主要使用基于csv的操作。

最近,我遇到以下情况的问题。

在我的流文件中,我需要对列值进行正则表达式操作,并用其他一些代码“替换”它们。 我使用replaceAll函数轻松地做到了这一点。

首先,让我们看看replaceAll在Apache-NiFi中的作用。 它带有两个字符串参数,第一个是正则表达式,第二个是替换值。

有关更多详细信息,我强烈建议阅读关于replaceAll的Apache-NiFi表达式语言指南。

对于第一次尝试,我使用UpdateRecord处理器对列使用了以下语法:

${field.value:replaceAll(${field.value:length():le(8)},'Undefined'):replaceAll('[a-z]+','Wrong')}

这首先检查列值的长度是否小于8个字符。 如果是这样,它将用Undefined代替。 但是,某些与[a-z] +模式匹配的数据被替换为“错误”,即使它们少于8个字符。

我试图自己解决此问题,由于花了太多时间,我问了StackOverflow社区。 Lamanus的回答使我想到了Apache-NiFi中的ifElse。

现在,让我们来看一下Apache-NiFi的ifElse的行为。 它有两个参数,但不同之处在于,其结果基于表达式的Subject。

如果主题为true,则第一个参数为第二个参数。

如示例所示:$ {bool:ifElse('a','b')},此处bool为true。 因此,如果我使用replaceAll,则该值将替换为a。

为了使用此脚本,我必须更改逻辑,方法是检查它是否包含8个以上的字符,然后应用基于自定义正则表达式的操作。


${field.value:length():ge(8):ifElse(
${field.value:replaceAll(‘[a-z]+’,’Wrong’)
:replaceAll('[0-9][a-z]+','Variable1')
,${field.value:replace(${field.value},'Undefined')}
// this is the statement executed when value length is shorter than 8 characters.)}

我希望这个简短的描述可以使您更好地理解如何在Apache-NiFi中使用ifElse。

SO资源郑重声明:
1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!3187589@qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理,有奖励!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!

SO资源 » 如何在Apache-NiFi中使用ifElse?