如何在NiFi中过滤文件名?邮件附件导入HDFS筛选特定文件
嘿,我来帮你搞定NiFi里筛选特定邮件附件的事儿!针对多附件邮件里挑特定文件名的需求,有几个靠谱的方法,一步步来:
方法1:用
RouteOnAttribute处理器(最常用) 这是处理这类需求的标准操作,灵活度很高:
- 首先得确保你已经用
FetchEmail或GetEmail拉取到了邮件,一定要开启“Split Attachments”选项——这样每个附件会被拆成独立的FlowFile,方便单独筛选 - 添加
RouteOnAttribute处理器,配置自定义属性:- 新建一个属性(比如叫
KeepTargetFile),值用NiFi表达式语言写匹配规则:- 精确匹配:
${filename:equals('你的目标文件名.ext')} - 模糊匹配(比如前缀):
${filename:startsWith('daily_report_')} - 包含关键词:
${filename:contains('2024_q3')}
- 精确匹配:
- 把“Routing Strategy”设为
Route to Property name,这样匹配成功的FlowFile会走到KeepTargetFile关系,不匹配的走unmatched
- 新建一个属性(比如叫
- 把
KeepTargetFile的输出连到PutHDFS,剩下的不匹配FlowFile可以直接丢去Delete处理器清理掉
方法2:用
FilterFile处理器(适合本地临时文件场景) 如果你的附件先被FetchEmail落地到了本地临时目录,可以用这个处理器直接过滤:
- 配置
FilterFile的File Filter属性,用正则表达式写规则,比如:- 精确匹配:
^target_data\.csv$ - 匹配特定后缀:
.*\.xlsx$
- 精确匹配:
- 它会自动过滤掉不符合规则的文件,只留符合条件的FlowFile往下游发
方法3:在
FetchEmail里提前筛选(更高效) 不想等所有附件都生成再处理?直接在拉取邮件阶段就过滤:
- 打开
FetchEmail的配置面板,找到Attachment Filter属性 - 输入正则表达式或文件名规则,比如
monthly_summary\.pdf,这样FetchEmail只会下载符合规则的附件,从源头减少后续工作量
要是你需要更复杂的判断(比如同时匹配文件名和文件大小),可以先拿UpdateAttribute提取文件元数据,再用RouteOnAttribute做组合条件判断,灵活性拉满!
内容的提问来源于stack exchange,提问作者Riyaz Khan
相关产品推荐
相关产品推荐

