Apache Nifi:使用更新记录处理器替换列中的值



我有一个csv,看起来像这样:

name,code,age
Himsara,9877,12
John,9437721,16
Razor,232,45

我必须根据一些正则表达式替换列code。我的逻辑显示在下面的 Scala 代码中。

if(str.trim.length == 9 && str.startsWith("369")){"PROB"}
else if(str.trim.length < 8){"SHORT"}
else if(str.trim.startsWith("94")){"LOCAL"}
else{"INT"}

我使用UpdateRecord处理器替换code列中的数据。我添加了一个名为/code的属性,其中包含该值。

${field.value:replaceFirst('^[0-9]{1,8}$','SHORT'):replaceFirst('[94]w+','OFF_NET')}

替换代码时有效

  1. 长度小于 8,带"短">
  2. 以"本地"开头的 94

我找不到替换列中数据的方法,code当它等于 8 位数字时以 0 开头时。另外,如果数据不属于上述任何条件,我该如何替换数据。(数据应替换为INT的情况(

希望您可以建议将工作流或值添加到更新记录中的属性中,以使上述两个替换发生。

有一个lengthstartsWith函数。

${field.value:length():lt(8):ifElse(
'SHORT', ${field.value:startsWith(94):ifElse(
'LOCAL', ${field.value:length():equals(9):and(${field.value:startsWith(369)}):ifElse(
'PROB', 'INT'
)})})}

我已经放置了换行符以便于识别功能,但应该将其删除。

顺便说一下,INT 意味着要替换一些字符串值?很抱歉造成混乱。


好吧,如果您只想使用正则表达式,则可以尝试以下代码。

${field.value
:replaceFirst('[0-9]{1,8}', 'SHORT')
:replaceFirst('[94]w+', 'OFF_NET')
:replaceFirst('369[0-9]{6}', 'PROB')
:replace(${field.value}, 'INT')
}

最新更新