如何在NiFi中当ListFile包含指定三类文件时才进入后续流程
实现方法
1. 配置ListFile Processor
- 指定目标文件夹路径到
Input Directory参数 - 在
File Filter中填入正则表达式:(abcd_.*\.txt|.*_completed\.txt|phone_detail\d+\.txt),确保能筛选出所有符合三类规则的文件
2. 用RouteOnAttribute判断文件完整性
在ListFile之后串联RouteOnAttribute Processor,通过自定义属性判断三类文件是否全部存在:
- 添加属性
all_files_exist,设置其值为:
${filename:matches('abcd_.*\\.txt'):count() > 0} and ${filename:matches('.*_completed\\.txt'):count() > 0} and ${filename:matches('phone_detail\\d+\\.txt'):count() > 0}
该表达式会分别统计三类文件的存在数量,只有三类都至少有一个时,返回结果为true
- 配置路由规则:
- 将
all_files_exist=true的数据流路由到后续业务流程 - 将
all_files_exist=false的数据流路由到Terminate关系,直接终止流程
- 将
3. 可选:去重处理
如果文件夹内可能存在多个同类型文件(比如多个phone_detail[0-9]+.txt),可在ListFile后添加DistinctValues Processor,按文件类型做去重处理,避免重复计数影响判断逻辑
注意事项
- NiFi表达式语言中的正则需要双反斜转义,所以表达式里的
\d要写成\\d,.匹配任意字符时无需额外转义 - 若无需遍历子文件夹,需将ListFile的
Recurse Subdirectories设为false - 可在终止流程前添加
LogAttributeProcessor,记录缺失的文件类型,方便问题排查
内容的提问来源于stack exchange,提问作者dinesh palganesan
相关产品推荐
相关产品推荐

