You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:43:21