Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 使用NiFi更新CSV内字段中的值_Apache_Etl_Apache Nifi - Fatal编程技术网

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

Apache 使用NiFi更新CSV内字段中的值,apache,etl,apache-nifi,Apache,Etl,Apache Nifi,我想实现一个简单的用例,使用NiFi将CSV内的字段中的多个字符串/文本值更新为整数值。例如,我的CSV文件如下所示: 输入CSV文件: 字段1、字段2 美国,苹果 美国,苹果 印度,葡萄 橙色中国城 澳大利亚国家,桃子 印度,葡萄 橙色中国城 因此,我希望输出CSV如下所示: 输入CSV文件: 字段1、字段2 1、苹果 1、苹果 4、葡萄 3、橙色 2、桃子 4、葡萄 3、橙色 我希望所有美国地区1更新为1,澳大利亚国家更新为2,中国城更新为3,依此类推……我能够使用UpdateRecord

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

输入CSV文件:

字段1、字段2

美国,苹果

美国,苹果

印度,葡萄

橙色中国城

澳大利亚国家,桃子

印度,葡萄

橙色中国城

因此,我希望输出CSV如下所示:

输入CSV文件:

字段1、字段2

1、苹果

1、苹果

4、葡萄

3、橙色

2、桃子

4、葡萄

3、橙色

我希望所有美国地区1更新为1,澳大利亚国家更新为2,中国城更新为3,依此类推……我能够使用UpdateRecord processor更新一个值,就像使用替换值策略“Literal replace”一样。请参见下面的附图:

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

处理器可以执行此操作。它读取包含值映射的“查找”文件,并执行逐行替换。下面是具有示例配置值的。它不是“面向记录的”,但应该适用于您描述的场景

使用
QueryRecord
处理器(使用类似Sql的case-when语句)

(或)

LookupRecord
处理器,通过定义
SimpleKeyValueLookupService


有关类似问题,请参阅和链接。

感谢您快速回复。你能帮我处理我用例的正则表达式吗?我不确定如何为我的案例定义正则表达式。根据提供的输入,我将尝试类似于
^([\w\s]+)(?=\s?,)
的方法。这将匹配行首的“单词”,后跟(可选)空格和逗号。为了与查找文件中的键/值对对齐,您可能需要对捕获组进行一些调整。处理器的出处数据和日志输出在这里会很有帮助。@Shu我不能使用UpdateRecord处理器实现这一点吗?同时使用此链接:将使我写出CSV中的所有列。例如,我有1000+列,我只想更新字段_1,那么该字段的case语句如何呢?我应该做select*,Case语句吗?我很困惑here@Shu或者我可以用ReplaceText实现这一点?如果是,怎么做?提前谢谢