Informatica Cloud间接加载多扁平文件时如何实现记录去重?
解决方案
方法1:用Aggregator转换搞定去重+保留文件名
这是最直接的方案,核心是按业务主键分组,只保留每组里的一条记录和对应的文件名:
- 先把Indirect File的源配置好,确保能拿到业务主键字段和
FileName系统变量(这个变量会自动带出当前记录所属的文件名)。 - 加个Expression转换,不用做任何计算,只是把所有字段传过去就行,方便后续处理。
- 拖入Aggregator转换:
- 把所有用来判断重复的业务主键字段设为Group By字段(比如订单ID、用户ID这类组合起来唯一的字段)。
- 对于
FileName字段,用FIRST(FileName)或者LAST(FileName)函数,根据需求选择——要保留第一次出现的文件名就用FIRST,要最后出现的就用LAST。 - 其他非主键的业务字段,如果同一主键下的值一致,直接选进Aggregator;如果有差异,同样用
FIRST()或LAST()固定取值。
- 最后把Aggregator的输出连到目标表,得到的就是去重后的唯一记录,还带着对应的文件名。
方法2:Lookup转换(适合大文件场景)
如果文件数据量很大,Aggregator性能跟不上,就用Lookup:
- 先做个临时映射,把所有文件的业务主键加载到临时表(或者用内存Lookup缓存),确保主键唯一。
- 主映射里加Lookup转换,用源记录的业务主键关联缓存里的主键。
- 设置过滤规则:只有源主键在缓存里找不到的时候,才允许这条记录通过,同时记录当前的文件名。要是用动态缓存,第一次出现的记录写入目标后会自动更新缓存,后续重复的主键直接被过滤掉。
方法3:Rank转换辅助去重
- 加个Rank转换,按业务主键分组,给每个分组里的记录按加载顺序(或指定规则)排个名次。
- 把Rank值设为1,这样每个分组只留排名第一的记录。
- 再接个Filter转换,只保留Rank值为1的记录,就能拿到每个唯一业务主键对应的一条记录,文件名也会保留。
内容的提问来源于stack exchange,提问作者Intiyaz
相关产品推荐
相关产品推荐

