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

2024-03-02

我有一个 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')}

This works当替换代码时

  1. 长度小于8,带“SHORT”
  2. 以“LOCAL”开头的 94

我无法找到替换列中数据的方法,code当它等于8位数字时AND当它以 0 开头时。另外我怎样才能替换数据如果不陷入任何条件上文提到的。 (数据应替换为的情况INT)

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


有一个length and startsWith功能。

${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')
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐