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

如何在Azure Data Flow中配置带参数化数据集的CDC以处理每日分区

Azure Data Factory CDC 与 ADLS 分区文件夹配置指南

核心配置修正:单源CDC的误区

你当前用单源启用CDC的方式不适用文件快照对比场景——ADF的源CDC选项仅针对原生支持CDC的数据源(如SQL Server CDC、Azure SQL CDC)。对于ADLS的分区文件CDC,需要双数据源+CDC差异检测转换实现新旧数据对比。


疑问解答与分步配置

1. Data Flow动态参数与CDC配置

步骤1:给Data Flow添加参数

在Data Flow的「参数」面板新增两个字符串参数:

  • current_partition:接收管道传入的基线分区日期(如20241116)
  • next_partition:接收管道传入的目标分区日期(如20241117)

步骤2:配置两个源数据集

  • 源1(当前增量数据):绑定raw层参数化数据集,设置:
    • p_DirectoryName = /raw/supplier
    • p_partition_folder = $current_partition(Data Flow参数)
  • 源2(基线数据):绑定curated层参数化数据集,设置:
    • p_DirectoryName = /curated/supplier
    • p_partition_folder = $next_partition(Data Flow参数)

步骤3:添加CDC差异检测转换

将两个源数据接入CDC差异检测转换:

  • 在「设置」标签页:
    • 选择「当前数据流」为源1(raw层最新数据)
    • 选择「参考数据流」为源2(curated层基线数据)
    • 设置主键列(如supplier_id,用于匹配记录)
    • 勾选需要检测的操作:插入、更新、删除
  • 转换后会生成_operation字段,标记每条记录的操作类型(Insert/Update/Delete)

步骤4:动态写入目标

目标数据集绑定curated层参数化数据集,设置:

  • p_DirectoryName = /curated/supplier
  • p_partition_folder = $next_partition(Data Flow参数)
  • 写入时可根据_operation字段处理:
    • 插入/更新:直接写入目标分区
    • 删除:如果需要保留历史,可标记删除状态;如果是硬删除,需启用目标的「允许合并」逻辑

2. 首次运行无基线的处理

在父管道中添加Get Metadata活动,检查curated层current_partition路径是否存在:

  1. 配置Get Metadata的数据集为curated层参数化数据集,传入current_partition值
  2. 勾选「Exists」字段作为输出
  3. 添加If Condition活动:
    • 条件表达式:@activity('Get Metadata').output.exists
    • 分支1(存在):执行正常的Data Flow(带CDC对比)
    • 分支2(不存在):执行简化版Data Flow,直接将raw层next_partition的数据全部作为新增写入目标(跳过CDC差异检测)

或者在Data Flow内部用条件分支转换处理:

  • 用exists()函数检测基线数据集是否有数据:@exists(source2#output, 1=1)
  • 分支1(有数据):走CDC差异检测流程
  • 分支2(无数据):直接将源1数据写入目标,同时添加_operation = 'Insert'字段

3. 更优方案与最佳实践

方案1:自动化分区日期管理

不用手动维护JSON元数据文件,改用以下方式自动计算分区:

  • 用@formatDateTime(utcnow(), 'yyyyMMdd')获取当前日期作为next_partition
  • 用@formatDateTime(addDays(utcnow(), -1), 'yyyyMMdd')获取前一日作为current_partition
  • 如果需要自定义分区逻辑,可将最新处理日期存在Azure SQL表或ADLS的元数据文件中,用Lookup活动读取后计算下一个分区

方案2:简化管道逻辑

将有无基线的判断逻辑移入Data Flow,减少管道活动数量:

  • 用派生列转换给基线数据添加默认值(如果无数据),再用CDC差异检测转换处理全量数据
  • 或者用Union转换将基线数据(如果存在)与空数据集合并,确保CDC转换始终有参考数据

方案3:增强数据追溯

  • 在目标层保留_operation和_process_date字段,记录操作类型与处理时间
  • 对curated层的分区文件,可按操作类型拆分存储(如/curated/supplier/20241117/insert、/curated/supplier/20241117/update),方便后续审计

内容的提问来源于stack exchange,提问作者Nahid Talukdar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:23:23