NiFi:ExtractText 中的正则表达式获取 CSV 标头而不是数据

2024-04-11

我正在开发一个获取 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

我想获取第一个字段(即国家/地区)的字段值。将这些记录放入特定目录中。美国记录转到美国目录,英国记录转到英国目录,依此类推。

我现在的流程是:

GetFile---->SplitText(行分割计数 = 1 & 标题行计数 = 1) ---->ExtractText(行=(.+))---->PutFile(目录 = \tmp\data\${line:getDelimitedField(1)})。我需要将头文件复制到所有拆分文件中以用于不同的目的。所以我需要他们。

问题是,传入的 CSV 文件被成功分割成多个带有标头的流文件。但是,我给出的正则表达式ExtractText处理器根据分割流文件的 CSV 标头而不是记录对其进行评估。因此,我总是在“线路”属性中输入“国家”,而不是“美国”或“英国”。所以所有文件都转到\tmp\data\country。帮我看看如何解决这个问题。


我相信 getDelimitedField 只能在单行上工作,并且可能不会超出分割文件中的换行符。

我主张采用稍微不同的方法,您可以更改 ExtractText 以通过正则表达式查找国家/地区代码,并避免需要将文件内容作为属性包含在内。

使用正则表达式^.*\n+(\w+)将捕获第一行和第一组单词字符(直到逗号)并将它们放置在您在捕获组 1 中指定的属性名称中(例如country.1)。

我创建了一个模板,应该可以获取您正在寻找的值https://github.com/apiri/nifi-review-collat​​eral/blob/master/stackoverflow/42022249/Extract_Country_From_Splits.xml https://github.com/apiri/nifi-review-collateral/blob/master/stackoverflow/42022249/Extract_Country_From_Splits.xml

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

NiFi:ExtractText 中的正则表达式获取 CSV 标头而不是数据 的相关文章

随机推荐