Apache NiFi读取制表符分隔CSV及属性值前两列的配置方法
问题1:如何在Apache NiFi中读取制表符分隔的CSV流文件的第一列和第二列?
以下是两种实用的实现方法:
方法一:使用ExtractText处理器
- 将ExtractText处理器添加到画布,连接上游生成/获取CSV流文件的组件。
- 进入处理器配置的Properties标签页:
- 设置Regular Expression为
^([^\t]+)\t([^\t]+).*,用于匹配每行开头的两个制表符分隔字段 - 设置Capture Group 1为
column1(自定义属性名,存储第一列内容) - 设置Capture Group 2为
column2(存储第二列内容) - 若需要逐行处理,将Line By Line属性设为
true
- 设置Regular Expression为
方法二:使用ConvertRecord处理器(适合结构化批量处理)
- 添加ConvertRecord处理器,同时创建两个控制器服务:CSVReader和RecordSetWriter(例如JsonRecordSetWriter)。
- 配置CSVReader控制器服务:
- 设置Field Delimiter为
\t(表示制表符) - 若CSV无表头,将Header Line Count设为
0,并自定义字段名(如field1,field2)
- 设置Field Delimiter为
- 配置ConvertRecord处理器:
- 在Properties中,将Record Reader指定为已配置的CSVReader
- 将Record Writer指定为JsonRecordSetWriter(或其他适用格式)
- 处理完成后,流文件内容会转为结构化格式,后续可通过EvaluateJsonPath等处理器提取
field1和field2的值
问题2:在UpdateAttribute处理器中将制表符分隔的属性值拆分到多个新属性
已知流文件属性attribute1的值为制表符分隔格式(示例:Hi Hello there),配置步骤如下:
- 添加UpdateAttribute处理器,连接上游组件。
- 进入处理器配置的Properties标签页,新增三个属性:
- updateAttribute1:值填写
${attribute1:getDelimitedField(1, '\t')},获取第1个分隔部分 - updateAttribute2:值填写
${attribute1:getDelimitedField(2, '\t')},获取第2个分隔部分 - updateAttribute3:值填写
${attribute1:getDelimitedField(3, '\t')},获取第3个分隔部分
- updateAttribute1:值填写
- 保存配置并启动处理器,流文件会自动新增这三个属性,对应拆分后的各部分内容
注意:
getDelimitedField函数的索引从1开始,制表符分隔符需用'\t'表示以确保转义正确
内容的提问来源于stack exchange,提问作者Amarnatha Reddy
相关产品推荐
相关产品推荐

