我正在处理获取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
我想得到第一个字段的字段值,即country。将这些记录放入特定目录。美国记录转到美国目录,英国记录转到英国目录,依此类推。
我现在的流程是:
GetFile
----> SplitText
(行拆分计数= 1&标题行计数= 1)----> ExtractText
(line =(。+))----> PutFile
(Directory = \ tmp \ data \ $ {line:getDelimitedField(1)})。为了不同的目的,我需要在所有拆分文件中复制头文件。所以我需要它们。
问题是,传入的CSV文件被成功分割成多个流文件。但是,我在ExtractText
处理器中给出的正则表达式会根据分割的流文件对其进行评估。 CSV标头而不是记录。因此,不要让美国或英国进入"线"属性,我总是得到" country"。所以所有文件都转到\tmp\data\country
。帮我解决这个问题。
答案 0 :(得分:2)
我相信getDelimitedField只会在单行上运行,并且很可能不会超出拆分文件中的换行符。
我会提倡稍微不同的方法,您可以通过正则表达式更改ExtractText以查找国家/地区代码,并避免将文件内容作为属性包含在内。
使用^.*\n+(\w+)
的正则表达式将捕获第一行和第一组单词字符,直到逗号,并将它们放在您在捕获组1中指定的属性名称中。(例如country.1)。< / p>
我已经创建了一个模板,可以在https://github.com/apiri/nifi-review-collateral/blob/master/stackoverflow/42022249/Extract_Country_From_Splits.xml
获取您要查找的值