Azure Data Factory中通用文件名校验及文件处理实现方案问询
存储容器文件命名规则校验与分流处理方案
核心思路
将SQL表中的通配符命名规则转换为正则表达式,遍历存储容器内的所有文件,逐一与规则匹配;匹配成功的文件,根据后缀类型(Excel/CSV)分流至对应处理管道。
具体实现步骤
1. 优化SQL规则表(可选但推荐)
为SQL规则表新增FileExtension字段,明确每个规则对应的文件后缀,避免模糊匹配:
| RulePattern | FileExtension |
|---|---|
| AAA_LocalRate_*_LC | .xlsx |
| AAA_PostTaxReport_*_LC | .xlsx |
| AAA_GroupRate_*_LC | .xlsx |
| ABC_Vendors_* | .csv |
2. 获取文件与规则数据
- Get Metadata任务:连接目标存储容器,勾选
Child items,获取所有文件的元数据(重点提取Name字段);可设置过滤条件,仅获取Item type为File的条目。 - Lookup任务:从SQL表读取完整规则列表,确保返回所有行数据。
3. 双层循环实现规则匹配
使用For Each任务嵌套完成匹配逻辑:
3.1 外层循环:遍历所有文件
循环对象为Get Metadata输出的childItems集合,每次迭代处理单个文件。
3.2 内层循环:遍历规则列表
循环对象为Lookup任务输出的规则集合,每次迭代生成对应正则并匹配:
- 生成正则表达式:用
Set Variable任务将规则中的通配符*替换为正则的.*,并拼接对应文件后缀,示例表达式:
(@concat('^', replace(item().RulePattern, '*', '.*'), item().FileExtension, '$')^匹配开头,$匹配结尾,确保完全符合规则) - 正则匹配判断:用
If Condition任务验证当前文件名是否匹配正则,表达式为:
(@matches(item().Name, variables('RegexPattern'))item().Name为外层循环当前处理的文件名)
4. 匹配成功后分流处理
若If Condition返回True,根据FileExtension字段调用对应管道:
- 后缀为
.xlsx:触发Excel文件处理管道,传递当前文件名作为参数 - 后缀为
.csv:触发CSV文件处理管道,传递当前文件名作为参数
5. 未匹配文件处理(可选)
在文件循环内设置IsMatched变量(初始为False),匹配成功后设为True。循环结束后判断该变量,若为False,可将文件移动至错误存储容器,或写入日志表记录异常。
内容的提问来源于stack exchange,提问作者Wouter Lefebvre
相关产品推荐
相关产品推荐

