使用NiFi更新CSV内字段中的值

时间:2019-01-12 01:37:21

标签: apache etl apache-nifi

我想实现一个简单的用例,使用NiFi将CSV字段中的多个字符串/文本值更新为Integer值。例如,我的CSV文件如下所示:

输入CSV文件:

字段_1,字段_2

美国,苹果

美国,苹果

印度,葡萄

唐人街,橙色

澳大利亚,桃子

印度,葡萄

唐人街,橙色

所以我希望输出CSV像这样:

输入CSV文件:

字段_1,字段_2

1,苹果

1,苹果

4,葡萄

3,橙色

2,桃子

4,葡萄

3,橙色

我希望将Field_1中的所有美洲更新为1,将澳大利亚国家更新为2,将中国城更新为3,依此类推...我只能使用 UpdateRecord处理程序将一个值更新为将替换价值策略用作“ 文字替换”。请参见下面的图片:

UpdateRecord Processor

但是我无法更新Field_1中的剩余值,例如中国,印度等。我知道可以复制多个UpdateRecord处理器来实现此目的,但是我只想用一个处理器来实现此用例。如何使用一个处理器执行此操作?如果是,要在NiFi中设置什么配置以实现此目的? 先感谢您。任何帮助深表感谢。

3 个答案:

答案 0 :(得分:0)

ReplaceTextWithMapping处理器可以执行此操作。它读取一个包含值映射的“查找”文件,并逐行替换。这是a related answer,其中包含示例配置值。它不是“面向记录的”,但适用于您描述的场景。

答案 1 :(得分:0)

使用 QueryRecord 处理器(在语句时使用类似Sql的情况)

(或)

LookupRecord 处理器,方法是定义 SimpleKeyValueLookupService

有关类似问题,请参见thisthis链接。

答案 2 :(得分:0)

在字段定义上再做一次替换。

${field.value:replace("America","1"):replace("India","4"):replace("Australia","2")}

这对我有用