Microsoft Azure Data Factory:如何实现基于包含关系的表关联?
Azure Data Factory Data Flows 实现包含关系的表关联方案
针对你需要基于「表1的Name是否包含在表2的Names字段中」实现关联的需求,提供两种可行方案:
方案一:拆分表2后执行等值关联(高性能推荐)
适用于表2数据量较大的场景,利用Data Flows的优化操作提升效率:
拆分表2的Names字段为单行记录
- 引入表2数据源后,添加「派生列」转换,生成数组列:
该表达式会将逗号分隔的Names拆分为单个名字组成的数组。NameArray = split(Names, ', ') - 接着添加「展开(Flatten)」转换,选择
NameArray列作为展开对象,将数组拆分为多行。此时表2的每条多名字记录会被拆分为多条单名字记录,每条记录保留原Country值。
- 引入表2数据源后,添加「派生列」转换,生成数组列:
左外连接表1与处理后的表2
- 引入表1数据源,添加「Join」转换,关联表1和拆分后的表2。
- 设置关联条件为:
表1.Name == 表2.NameArray - 关联类型选择左外连接,确保表1中无匹配的记录(如Lacie Garrison)被保留。
清理输出结果
- 添加「选择」转换,保留
Id、Name、Country列即可得到预期结果。若存在重复匹配(表2同一名字对应多个Country),可添加「聚合」转换,按Id和Name分组,用first(Country)取唯一匹配值。
- 添加「选择」转换,保留
方案二:Lookup转换配合contains表达式(快速实现)
适用于表2数据量较小的场景,无需拆分表结构:
在表1数据流中添加Lookup转换
- 以表1为主数据流,添加「Lookup」转换,关联表2数据源。
- 在匹配条件中输入表达式:
contains(表2.Names, 表1.Name) - 关联类型选择左外连接。
提取关联字段
- 从Lookup的输出结果中,选择表2的
Country字段添加到主数据流。 - 用「选择」转换保留所需的
Id、Name、Country列,完成关联。
- 从Lookup的输出结果中,选择表2的
注意:方案二的
contains是逐行字符串匹配操作,数据量大时性能不如方案一的等值Join,需根据数据规模选择。
内容的提问来源于stack exchange,提问作者Isabel
相关产品推荐
相关产品推荐

