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

如何在Azure Data Factory数据流中模拟Cross Apply操作?

在Azure Data Factory数据流中模拟Cross Apply实现目标逻辑

首先拆解原SQL的核心逻辑:对OrderMain的每条记录,计算OrderLastDate(取OrderEndDate和非空OrderTerminationDate中的最小值),再关联TSSchedule并聚合得到最终结果。以下是具体实现步骤:

1. 处理OrderMain数据,计算OrderLastDate

原SQL的Cross Apply本质是单条记录内的字段计算,无需关联外部数据集,可通过以下两种方式实现:

方式一:直接用派生列(更简洁)

  • 添加派生列转换,新增字段OrderLastDate,使用表达式完成最小值计算:
    iif(isNull(OrderTerminationDate), OrderEndDate, min(OrderEndDate, OrderTerminationDate))
    
    该表达式直接处理OrderTerminationDate为空的场景,一步得到每条记录的OrderLastDate。

方式二:基于分支Union实现(适配你尝试的思路)

如果你坚持用分支Union的方式,调整步骤如下:

  • 从OrderMain数据源分出两个分支:
    • 分支1:保留OrderId、OrderVersionId、OrderStartDate、OrderTimeCycleId、OrderEndDate,将OrderEndDate重命名为DateValue
    • 分支2:添加筛选转换,只保留OrderTerminationDate不为空的记录,保留OrderId、OrderVersionId、OrderStartDate、OrderTimeCycleId、OrderTerminationDate,将OrderTerminationDate重命名为DateValue
  • 对两个分支执行Union转换,合并所有记录
  • 添加聚合转换,分组字段选择OrderId、OrderVersionId、OrderStartDate、OrderTimeCycleId,聚合规则选择min(DateValue)并命名为OrderLastDate
    此步骤可得到每条OrderMain记录对应的OrderLastDate,与原SQL的Cross Apply结果完全一致。

2. 关联TSSchedule数据集

  • 将包含OrderLastDate的OrderMain数据集,与TSSchedule数据集执行内连接转换:
    • 连接条件设置为:
      OrderTimeCycleId == TimeCycleId
      && OrderLastDate >= FromDate
      && OrderStartDate <= ToDate
      

3. 最终聚合计算

  • 添加聚合转换,分组字段选择OrderId,设置聚合规则:
    • OrderVersionId取max(),命名为OrderVersionId
    • FromDate取max(),命名为TSSFromDate
    • ToDate直接保留(需确保关联后每个分组对应唯一ToDate,若存在多条匹配需根据业务逻辑调整聚合规则)

验证与调整

通过数据流的数据预览功能,依次检查每个转换后的数据集:确认OrderLastDate计算结果正确、连接后的数据集符合预期,最终验证聚合结果与原SQL输出一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 14:47:26