Talend中如何忽略已匹配lookup表记录并获取下一条匹配记录
Talend中实现Lookup表多匹配记录的轮询提取
问题背景
主数据流为XML输入,包含order和sku字段,需与Lookup表匹配提取reference字段。同一order+sku对应多条reference记录,但使用tMap唯一匹配设置时,仅返回最后一条匹配记录,需求改为依次获取每条未使用过的reference。
解决方案步骤
1. 给Lookup表添加分组自增序号
对Lookup表按order和sku分组,给每组内的记录添加递增序号(命名为match_seq),确保同一order+sku下的每条reference有唯一的序号标识:
- 使用
tAggregateRow组件,分组字段选择order和sku - 在聚合字段中添加
Numeric.sequence("seq_" + order + "_" + sku, 1, 1),生成每组内从1开始的自增序号 - 处理后的Lookup表数据示例:
order sku reference match_seq 91245932 8893301500 91245932_8893301500_08 1 91245932 8893301500 91245932_8893301500_09 2 ... 91245932 9892823400 91245932_9892823400_22 5
2. 给主数据流添加输入计数
给主数据流中同一order+sku的每条记录添加递增序号(命名为input_seq),确保每条输入记录对应Lookup表中的一条匹配项:
- 如果主数据流中
order+sku是重复出现的,使用tAggregateRow按order和sku分组,生成input_seq;如果是全局递增,直接在tMap中使用Numeric.sequence("input_seq", 1, 1)
3. 修改tMap匹配逻辑
在tMap中设置主数据流与Lookup表的匹配条件为:
main.order == lookup.order && main.sku == lookup.sku && main.input_seq == lookup.match_seq
这样主数据流的第N条order+sku记录,会精准匹配Lookup表中对应分组的第N条reference,实现依次获取且不重复使用已匹配的记录。
4. 处理无匹配场景(可选)
如果主数据流的input_seq超过了Lookup表对应分组的最大match_seq,可在tMap中给reference字段设置默认值,或使用tFilterRow过滤无匹配的记录,根据业务需求调整。
内容的提问来源于stack exchange,提问作者simran kukreja
相关产品推荐
相关产品推荐

