在Azure Synapse Data Flow中动态对比两表查找缺失行的问题
解决Azure Dataflow中双向缺失记录检测的问题
问题原因
你遇到的是Exists转换的单向检查特性:默认情况下,Exists仅会检查主数据流中的记录是否存在于参照数据流中,只输出主数据流里不存在于参照的记录。
- 当源(15条)作为主数据流、Sink(10条)作为参照时,能输出源独有的5条;
- 但当Sink(15条)作为参照、源(10条)作为主数据流时,源的10条都在Sink里,自然无输出——而你需要的是Sink独有的记录,这时候得切换主/参照数据流的方向。
解决方案
方案1:两次Exists转换+合并
通过两次单向检查,再合并结果实现双向检测:
- 第一步:以源数据流为主,Sink数据流为参照,将
Exists的匹配条件设为Does Not Exist,得到「源有但Sink没有」的记录; - 第二步:以Sink数据流为主,源数据流为参照,同样设置
Exists为Does Not Exist,得到「Sink有但源没有」的记录; - 用
Union转换将上述两个结果集合并,最终输出就是双向的缺失记录。
方案2:Full Outer Join+过滤空值
用全外连接一次性获取双向缺失:
- 对源和Sink数据流做
Full Outer Join,选择用于匹配记录的唯一键(比如业务主键)作为关联字段; - 添加
Filter转换,过滤条件设置为:isNull(源关联字段) || isNull(Sink关联字段)isNull(源关联字段):代表Sink中存在但源中没有的记录;isNull(Sink关联字段):代表源中存在但Sink中没有的记录。
注意事项
- 确保关联字段的数据类型完全一致(比如都是字符串、整数),避免因类型不匹配导致匹配失败;
- 如果源或Sink存在重复记录,建议先通过
Distinct或Aggregate转换去重,再进行对比。
内容的提问来源于stack exchange,提问作者vipul
相关产品推荐
相关产品推荐

