如何在Azure Data Factory中实现数据集差集生成新数据集?
在Azure Data Factory中实现数据集的记录差集操作
可以实现,最直接高效的方式是利用Data Flow的左反连接(Left Anti Join)组件,以下是具体实现步骤:
需求回顾
你需要从Dataset B中剔除与Dataset A完全匹配(Email和Date字段均一致)的记录,得到仅包含B中独有的Dataset C。示例数据如下:
Dataset A
| Date | |
|---|---|
| test@gmail.com | 2023-01-05 |
| test@gmail.com | 2023-01-07 |
| test@gmail.com | 2023-01-09 |
Dataset B
| Date | |
|---|---|
| test@gmail.com | 2023-01-05 |
| test@gmail.com | 2023-01-07 |
| test@gmail.com | 2023-01-09 |
| test@gmail.com | 2023-01-11 |
| test@gmail.com | 2023-01-15 |
| test@gmail.com | 2023-01-17 |
期望结果Dataset C
| Date | |
|---|---|
| test@gmail.com | 2023-01-11 |
| test@gmail.com | 2023-01-15 |
| test@gmail.com | 2023-01-17 |
实现步骤(Data Flow方式)
- 创建Data Flow:在ADF中新建一个Data Flow资源。
- 添加源数据集:分别将Dataset A和Dataset B作为两个源节点添加到Data Flow中,确保源的连接、格式等配置正确。
- 添加Join组件:拖拽Join组件到画布,将Dataset B设为左表,Dataset A设为右表。
- 配置连接类型和条件:在Join组件设置中,选择连接类型为Left Anti,设置连接条件为
B.Email == A.Email且B.Date == A.Date。- Left Anti Join的作用是返回左表中所有无法与右表匹配的记录,正好满足“B减A”的需求。
- 配置Sink输出:添加Sink组件,将Join组件的输出连接到Sink,配置Sink指向目标Dataset C(需提前创建好该数据集)。
- 运行验证:将Data Flow添加到管道中,运行管道后检查Dataset C的结果是否符合预期。
备选方案(小数据量场景)
如果数据量较小,也可以通过以下方式实现:
- 使用Lookup活动读取Dataset A的所有记录,将结果作为参数传入Filter活动。
- 在Filter活动中对Dataset B进行过滤,保留那些不在Lookup结果中的记录,最后输出到Dataset C。
- 注:此方法仅适合小数据量,大数据量下性能远不如Data Flow。
内容的提问来源于stack exchange,提问作者Konzy262
相关产品推荐
相关产品推荐

