Azure Data Factory实现多条件校验分支流程的技术咨询
Azure Data Factory 替代SSIS实现文件校验与分支加载流程教程
一、核心思路
利用ADF的**活动依赖分支(成功/失败路径)**替代嵌套IF逻辑,结合Lookup、Set Variable、Filter等组件完成校验,避免编写冗长的Snowflake存储过程。整体流程:ForEach遍历入站文件 → 文件名校验 → 文件头校验 → 分支加载/失败处理。
二、具体实现步骤
1. 配置ForEach循环容器
- 先添加Get Metadata活动,数据源指向入站文件存储(如Azure Blob/ADLS),获取目标文件夹下的所有文件列表,输出为
childItems - 添加ForEach循环容器,循环项设置为
@activity('Get Metadata').output.childItems,遍历每个入站文件
2. 文件名校验环节
步骤2.1:提取并存储当前文件名
- 添加Set Variable活动,创建字符串变量
currentFileName,赋值为@item().name - 创建布尔变量
isFileNameValid,默认值设为false
步骤2.2:执行文件名合法性校验
- 添加Expression活动,编写校验逻辑赋值给
isFileNameValid。示例:校验文件名是否匹配前缀_8位日期.csv格式:@matches(replace(variables('currentFileName'), '.csv', ''), '^[A-Z]{3}_\d{8}$') - 若需动态规则,可改用Lookup活动查询Snowflake中的文件名规则表,匹配当前文件名是否在合法列表内
步骤2.3:校验结果分支
- 从校验活动添加失败路径(当
isFileNameValid为false时),直接跳转至失败处理流程 - 成功路径进入文件头校验环节
3. 文件头校验环节
步骤3.1:读取文件头内容
- 添加Lookup活动,数据源指向当前遍历的文件,开启
First row only选项,将读取到的第一行内容赋值给变量fileHeader
步骤3.2:校验文件头合法性
- 创建布尔变量
isHeaderValid,用Expression活动对比预定义的合法头。示例:@equals(variables('fileHeader'), 'ID,NAME,EMAIL,CREATED_DATE') - 若需按文件类型匹配不同头规则,可通过Lookup活动关联Snowflake中的头规则表,根据
currentFileName的前缀匹配对应规则
步骤3.3:校验结果分支
- 失败路径跳转至失败处理流程
- 成功路径进入文件类型分支加载环节
4. 失败处理流程(复用逻辑)
创建失败处理子管道,包含以下活动:
- Send Email:发送失败通知,内容包含文件名、失败原因(文件名不合法/文件头错误)
- Move File:将失败文件移动到错误文件夹,示例路径:
@concat(pipeline().parameters.errorFolder, '/', variables('currentFileName')) - Copy Data:将失败日志插入Snowflake的日志表,记录文件名、失败时间、原因等信息
5. 按文件类型分支加载逻辑
步骤5.1:识别文件类型
- 添加Set Variable活动,从
currentFileName提取类型标识。示例:通过文件名前缀判断类型:
将结果赋值给变量@split(variables('currentFileName'), '_')[0]fileType
步骤5.2:用Switch活动实现分支加载
- 添加Switch活动,基于
fileType变量的值配置分支:- 分支
CUST:执行客户文件加载流程(用Copy Data活动将数据写入Snowflake客户表,配合COPY INTO语句完成加载) - 分支
ORD:执行订单文件加载流程(对应写入Snowflake订单表) - 默认分支:跳转至失败处理流程(处理未知文件类型)
- 分支
三、关键技巧
- 用变量传递校验状态和文件信息,避免重复读取文件
- 子管道复用失败处理逻辑,减少冗余配置
- 简单校验逻辑优先用ADF Expression实现,复杂规则通过Lookup关联Snowflake规则表,便于后续维护
- ForEach循环可根据需求选择Sequential(文件有依赖时)或Parallel(提升效率)执行模式
内容的提问来源于stack exchange,提问作者Corey Livermore
相关产品推荐
相关产品推荐

