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

Azure Data Factory中获取不匹配记录:Lookup与条件判断失效问题

解决ADF中筛选两个Excel表不匹配记录的问题

问题场景

我在Azure Data Factory中用两个Lookup活动读取两张Excel表,分别连接到For Each活动,在活动内通过Set Variable设置@item.id,想筛选出两边不匹配的记录并存到新变量。尝试用If Condition活动,表达式为if(equals(setvariable1,setvariable2),null,setvariable1)但未生效。

两张表数据:
第一张表

Name  id
Ganesh 1
Vivek  2
Lah    3

第二张表

Name  id
Ganesh 1
Vivek  2
Man    3

期望输出:

Man  3
Lah  3

问题根源

你当前的实现逻辑存在核心缺陷:分别遍历两个表并单次比较当前遍历项的id,只能判断两个临时变量的id是否相等,无法完成全量的交叉匹配校验。比如当Lookup1遍历到Lah 3、Lookup2遍历到Man 3时,equals(3,3)会返回true,直接跳过这条实际不匹配的记录(Name不同),同时这种方式也无法批量收集所有不匹配项。


正确实现步骤

不需要嵌套For Each和If Condition,直接利用ADF的数组函数处理Lookup返回的数据集即可:

  1. 定义变量
    在ADF流水线中创建3个数组类型的变量:
  • var_table1_records:存储第一张表的所有记录
  • var_table2_records:存储第二张表的所有记录
  • var_mismatched_records:存储最终筛选出的不匹配记录
  1. 读取并存储表数据
  • 用Set Variable活动给var_table1_records赋值:
    @activity('Lookup1').output.value
    
  • 用Set Variable活动给var_table2_records赋值:
    @activity('Lookup2').output.value
    
  1. 筛选并合并不匹配记录
    用Set Variable活动给var_mismatched_records赋值,通过filter筛选出各自表中对方没有的记录,再用union合并结果:
@union(
    filter(variables('var_table1_records'), not(contains(variables('var_table2_records'), item()))),
    filter(variables('var_table2_records'), not(contains(variables('var_table1_records'), item())))
)

逻辑说明

  • contains(variables('var_table2_records'), item()):ADF会比较整个记录对象的所有字段,因此Lah 3和Man 3会被判定为不同记录
  • filter函数筛选出当前表中、但不存在于另一张表的所有记录
  • union函数将两张表各自的不匹配记录合并成一个数组,最终得到你需要的Man 3和Lah 3

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 17:06:28