如何通过ADF对比同结构Azure SQL Database表A与B并插入A中缺失行
ADF数据管道实现表A缺失记录插入表B的方案
需求说明
要搭建一个ADF数据管道,对比结构一致的Azure SQL Database表A(100条记录)和表B(90条记录),将表A中存在但表B缺失的10条记录插入到表B中。
已尝试的配置条件
- 条件1:
@greaterOrEquals(activity('GetLastModifiedDate').output.lastModified,adddays(utcnow(),-7)) - 条件2:
@and(equals(item().name,'master_data'),greaterOrEquals(activity('GetLastModifiedDate').output.lastModified,adddays(utcnow(),-7)))
可行实现方案
方案一:Lookup+ForEach+Copy(小数据量场景)
Lookup活动获取缺失记录
数据源选择Azure SQL Database,执行以下查询语句:SELECT * FROM 表A WHERE NOT EXISTS (SELECT 1 FROM 表B WHERE 表A.主键列 = 表B.主键列)关闭“仅返回第一行”选项,确保获取到所有缺失的10条记录。
ForEach循环插入记录
设置循环项为@activity('Lookup表A缺失记录').output.value,内部添加Copy活动:- 源使用“内联数据集”,数据填写
@item() - 目标选择表B,因表结构相同,直接启用自动映射即可。
- 源使用“内联数据集”,数据填写
方案二:Data Flow(大数据量场景)
搭建Data Flow逻辑
- 添加两个源数据集,分别关联表A和表B
- 添加Join活动,连接类型选择
Left Anti,通过主键列关联两张表,输出表A独有的记录 - 添加Sink活动,指向表B,写入方式选择
Insert
管道中调用Data Flow
添加Execute Data Flow活动,关联建好的Data Flow,按需配置参数即可运行。
现有条件的用法优化
你现有的两个条件用于判断表是否在7天内修改过,可放到If Condition活动中做前置校验:
- 条件1:判断目标表最近修改时间在7天内
- 条件2:同时校验表名为
master_data且最近修改时间在7天内
满足条件时再执行数据对比插入逻辑,避免无效运行。
内容的提问来源于stack exchange,提问作者mkn
相关产品推荐
相关产品推荐

