如何在Apache NiFi中按文件名前缀分组合并同组文件内容
Apache NiFi 同组文件合并最优实现方案
核心思路
提取文件名前两部分作为分组标识,将同组文件聚合后合并内容,最终输出合并后的文件。
组件流程配置
GetFile
配置文件读取路径,设置文件过滤规则(如*.txt),确保只读取目标文件。UpdateAttribute
添加自定义属性group_key,使用NiFi表达式语言提取文件名前两部分:${filename:getDelimitedField(1, '_')}_${filename:getDelimitedField(2, '_')}示例:对
12_345_hdr1.txt,会生成12_345作为分组键。MergeContent(核心组件)
关键配置项:- Correlation Attribute Name:设置为
group_key,确保同组文件被归为同一批次 - Merge Strategy:选择
Defragment,保证同组所有文件聚合完成后再合并 - Merge Format:选择
Concatenate,直接将后续文件内容追加到第一个文件末尾 - Minimum Number of Entries:设为2(匹配示例中每组2个文件的场景);若组数不固定,可结合
Maximum Bin Age(如10秒)触发合并,避免无限等待 - Delimiter Strategy:按需选择,若需在文件内容间加分隔符选
Text并设置分隔符(如换行),无需则选None
- Correlation Attribute Name:设置为
PutFile
配置目标输出路径,设置合并后的文件名格式:${group_key}_merged.txt示例:合并后的文件名为
12_345_merged.txt、34_123_merged.txt
调试与优化
- 可在
UpdateAttribute后添加LogAttribute组件,查看group_key是否正确生成,便于调试分组逻辑 - 若文件名格式有变动,需同步调整
UpdateAttribute中的表达式,确保分组键准确
内容的提问来源于stack exchange,提问作者Amarnatha Reddy
相关产品推荐
相关产品推荐

