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

如何在Azure Data Factory数据流中添加带ISNULL的JOIN关联条件

在Azure Data Factory数据流中实现带额外条件的左连接

问题背景

你需要将SQL中带ON UpdatedWOV.Id IS NULL AND [关联键]的左连接逻辑迁移到ADF数据流,之前尝试提前加过滤器导致丢失有效记录,核心是要区分过滤左表和连接条件中带额外逻辑的差异。

正确实现步骤

SQL中的left join会保留左表所有行,仅在满足ON子句的所有条件时匹配右表数据。ADF数据流的Join转换支持直接在连接条件中添加布尔逻辑,不需要提前过滤左表:

  1. 准备数据源:确保数据流中已包含CTH、UpdatedWOV、PT、BT及各类PMS记录表的数据集(可通过源转换或上游转换获取)。
  2. 处理带UpdatedWOV.Id IS NULL的左连接(以CTH左连PT为例):
    • 添加Join转换,左表选择包含CTH和UpdatedWOV字段的数据集,右表选择PT数据集。
    • 连接类型选择Left outer(对应SQL的left join)。
    • 在连接条件面板中:
      • 先添加第一个条件:CTH.Id == PT.TranId
      • 点击「添加条件」,选择逻辑关系为And,再添加第二个条件:isNull(UpdatedWOV.Id)(或直接在表达式框输入isNull(UpdatedWOV.Id))
    • 配置完成后,该Join转换完全对应SQL中的left join PT ON UpdatedWOV.Id is null AND CTH.Id = PT.TranId。
  3. 重复处理CTH左连BT的逻辑:用同样的方式设置连接条件为isNull(UpdatedWOV.Id) AND CTH.Id = BT.TranId。
  4. 处理无额外条件的左连接:对于连etl.PmsRecord、etl.PMSExpenseRecord等表的逻辑,直接在Join转换中设置对应的关联键即可(比如CTH.PMSRecordId == PmsRecord.Id),无需添加isNull条件。

为什么之前的方法出错

你之前用Filter转换提前过滤isNull(UpdatedWOV.Id)的行,会直接丢弃左表中UpdatedWOV.Id不为空的所有记录,这违背了SQL左连接的逻辑——SQL的left join会保留左表所有行,仅当UpdatedWOV.Id为空时才尝试匹配右表,UpdatedWOV.Id不为空时右表字段会显示null,但左表行仍会保留。

快捷写法

在ADF Join的表达式编辑器中,也可以直接输入完整的连接逻辑表达式,比如:

isNull(UpdatedWOV.Id) && CTH.Id == PT.TranId

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:27:27