Azure Data Factory中无共同列的两个数据集合并方法咨询
在Azure Data Factory中实现无关联列数据集的笛卡尔积合并
你需要的是笛卡尔积合并(即大数据集的每一行与小数据集的每一行进行交叉组合),普通Join(需要关联键)和Union(合并同结构行)确实满足不了这个需求,以下是两种可行方案:
方法一:Data Flow实现(推荐,适配大数据集)
Data Flow是ADF中处理批量数据的高效组件,适合你的数千行大数据集场景:
- 分别将小数据集(含
name列)和大数据集作为数据源导入Data Flow。
- 分别将小数据集(含
- 给两个数据集新增固定关联列:
- 对大数据集添加「派生列」转换,新增列
join_key,赋值为固定值(比如1)。 - 对小数据集执行同样操作,新增同名的
join_key列,值也设为1。
- 添加「Join」转换,将两个数据集通过
join_key列做Inner Join,并选择保留大数据集的所有字段以及小数据集的name列。
- 添加「Join」转换,将两个数据集通过
- (可选)添加「选择」或「派生列」转换,移除冗余的
join_key列。
- (可选)添加「选择」或「派生列」转换,移除冗余的
- 将处理后的数据集写入目标存储或数据库,就能得到类似
1A、1B、1C、2A、2B、2C的交叉结果。
- 将处理后的数据集写入目标存储或数据库,就能得到类似
方法二:Lookup + ForEach组合(适合小数据量场景)
如果大数据集行数不多,也可以用Pipeline活动组合实现,但效率远低于Data Flow:
- 用Lookup活动读取小数据集的所有
name值,将结果保存为数组变量。
- 用Lookup活动读取小数据集的所有
- 用另一个Lookup活动读取大数据集的所有行,或者用Copy活动结合迭代器遍历每一行。
- 添加嵌套ForEach:外层遍历大数据集的每一行,内层遍历小数据集的
name数组,将当前大数据行的字段与name组合后写入目标。
- 添加嵌套ForEach:外层遍历大数据集的每一行,内层遍历小数据集的
为什么原方法不行?普通Join需要匹配关联列,无共同列时无法建立映射;Union是将同结构的行合并(行数相加),而非交叉组合(行数相乘),因此都不符合你的需求。
内容的提问来源于stack exchange,提问作者thilemann
相关产品推荐
相关产品推荐

