我正在获取CSV文件的流程中。我想根据CSV记录的第一个字段将记录放入不同的目录中。
例如,CSV文件如下所示
country,firstname,lastname,ssn,mob_num
US,xxxx,xxxxx,xxxxx,xxxx
UK,xxxx,xxxxx,xxxxx,xxxx
US,xxxx,xxxxx,xxxxx,xxxx
JP,xxxx,xxxxx,xxxxx,xxxx
JP,xxxx,xxxxx,xxxxx,xxxx
Run Code Online (Sandbox Code Playgroud)
我想获取第一个字段(即国家/地区)的字段值。将这些记录放入特定目录。美国记录进入美国目录,英国记录进入英国目录,依此类推。
我现在的流程是:
GetFile
----> SplitText
(行拆分计数= 1&标题行计数= 1)----> ExtractText
(行=(。+))----> PutFile
(目录= \ tmp \ data \ $ {line:getDelimitedField( 1)})。我需要将头文件跨所有拆分文件复制,以达到不同的目的。所以我需要他们。
关键是,传入的CSV文件被成功拆分为多个流文件,并且标头成功。但是,我在ExtractText
处理器中给出的正则表达式将根据拆分后的流文件的CSV标头(而不是记录)对它进行评估。因此,我总是得到“国家”而不是使美国或英国进入“行”属性。因此,所有文件都转到\tmp\data\country
。帮我解决这个问题。
我相信 getDelimitedField 只能在单行上工作,并且可能不会超出分割文件中的换行符。
我主张采用稍微不同的方法,您可以更改 ExtractText 以通过正则表达式查找国家/地区代码,并避免需要将文件内容作为属性包含在内。
使用正则表达式 of^.*\n+(\w+)
将捕获第一行和第一组单词字符(直到逗号),并将它们放置在您在捕获组 1 中指定的属性名称中(例如country.1)。
我创建了一个模板,应该可以获取您正在寻找的值:https://github.com/apiri/nifi-review-collat eral/blob/master/stackoverflow/42022249/Extract_Country_From_Splits.xml
归档时间: |
|
查看次数: |
3230 次 |
最近记录: |