如何在Pentaho Data Integration中实现左连接后展示唯一匹配记录
在Pentaho Data Integration中实现有序一一左连接的方法
核心思路
因为两个数据源的匹配规则是同分组内按数据出现顺序一一对应,而非单纯基于字段等值匹配,所以需要给两个数据流添加分组内的自增行号,再通过「共同分组键(ID+Code)+行号」进行关联,就能实现预期的一一匹配效果。
具体实现步骤
1. 处理第一个数据源(含Amt、PK的表)
- 添加 Add sequence 组件:
- 设置
Name of sequence field为row_num(字段名可自定义,只要和第二个数据流保持一致即可) - 勾选
Reset sequence for each group,并将分组字段设为ID和Code,确保同一ID+Code组合下,行号从1开始依次自增。
- 设置
2. 处理第二个数据源(含FK的表)
- 同样添加 Add sequence 组件:
- 设置
Name of sequence field为row_num(和第一个数据流的行号字段名保持一致) - 勾选
Reset sequence for each group,分组字段同样设为ID和Code,保证同分组内行号从1开始递增。
- 设置
3. 关联两个数据流
- 使用 Merge Join 组件:
- 选择
Join type为Left outer join(左连接) - 设置连接键为
ID、Code、row_num三个字段,以此确保同分组内第N行的记录,能和另一数据源同分组的第N行精准匹配。 - 调整输入数据流顺序,将第一个数据源设为左表输入。
- 选择
4. 清理冗余字段(可选)
- 如果不需要保留行号字段,可添加 Select values 组件,移除
row_num字段,得到最终的目标结果。
为什么Stream Lookup无法实现?
Stream Lookup是基于匹配键查找并返回符合条件的第一条/最后一条(或指定聚合值),它无法识别数据的顺序逻辑,因此没法实现同分组内的有序一一对应。而通过添加分组行号的方式,给每条记录加上了“顺序标识”,就能精准匹配对应位置的记录。
内容的提问来源于stack exchange,提问作者Rajiya honey
相关产品推荐
相关产品推荐

