未知Flow File属性值无法用RouteOnAttribute,如何用MergeContent合并匹配文件?
用MergeContent按属性匹配合并FlowFile(无需预定义属性值)
核心思路
MergeContent支持通过${属性名}表达式动态分组,不需要提前知晓属性的具体取值——只要需要合并的FlowFile拥有相同的目标属性值,就会被自动归为同一组合并。
具体配置步骤
- 添加处理器:在NiFi画布中添加
MergeContent处理器 - 合并策略设置:
- 将
Merge Strategy设为Bin-Packaging(这是最适合按属性分组合并的策略) - 根据需求配置
Bin Size(比如填5表示每组最多合并5个FlowFile),或用Bin Maximum File Size按文件大小限制分组
- 将
- 分组规则配置:
- 在
Attribute to Use for Correlation中填入目标属性的表达式,比如按orderId属性匹配就填${orderId} - 这个配置会自动把所有属性值相同的FlowFile归为一组,完全不需要提前定义属性的具体取值
- 在
- 内容合并配置:
- 若需要在合并内容间添加分隔符,将
Delimiter Strategy设为Text并指定分隔符(比如换行符\n);不需要分隔符则选None - 根据数据格式设置
Merge Format为Binary或Text
- 若需要在合并内容间添加分隔符,将
- 触发条件配置:
- 可选设置
Bin Minimum File Count,比如填2表示至少2个同属性值的FlowFile才触发合并 - 设置
Idle Duration(比如1 min),如果到了指定时间仍未凑够最小文件数,也会强制触发合并
- 可选设置
注意事项
- 确保所有需参与合并的FlowFile都带有指定的目标属性,无该属性的FlowFile会被导向
Failure关系,可单独处理 - 若需多属性同时匹配,可使用表达式组合,比如
${orderId}-${userId},只有两个属性值都完全相同的FlowFile才会被合并 - 若存在属性名不统一的情况,可先通过
UpdateAttribute处理器统一属性名称,避免分组失败
内容的提问来源于stack exchange,提问作者Vyshnavi
相关产品推荐
相关产品推荐

