使用Informatica从表中删除重复项

时间:2017-02-27 19:11:14

标签: etl informatica informatica-powercenter

我有一个场景要在informatica中实现,我需要从基于PK的表中删除重复记录。但我需要保留第一次出现的PK值并删除其他值(如果是重复的PK)。

例如,如果我的来源有1,1,1,2,3,3,4,5,4。我想将目标数据看作1,2,3,4,5。我必须从同一个表中读取数据并需要加载到同一个表中。不能引入新表。请帮助我提供您的意见。

提前致谢!

3 个答案:

答案 0 :(得分:1)

我想你想要第一次出现,因为除了你输入的密钥之外还有其他(数据)列。因此你想要

1,b
1,c
1,a
2,d
3,c
3,d
4,e
5,f
4,b

转入

1,b
2,d
3,c
4,e
5,f

...

在这种情况下,请尝试此映射布局:

SRC -> SQ -> SRT -> AGG -> TGT
      SEQ /

将分拣机设置为对KEY进行排序,sequence_port(desc) 并且聚合器被设置为按KEY分组,而sequence_port不应该离开分拣器

希望你能跟着我:)。

答案 1 :(得分:1)

有多种方法可以做到这一点,最简单的方法就是在SQL覆盖中做到这一点。

假设上面引用的示例,SQL将是这样的。一般的想法是为主键设置一个行号(所以如果你有3行具有相同的pk,那么在为下一个pk重置之前它们将有1,2,3作为行号)

SQL:

select * from (
Select primary_key,column2 row_number() over (partition by primary_key order     by primary_key) as distinct_key) where distinct_key=1

在:

1,b
1,c
1,a
2,d
3,c
3,d

中级查询:

1,c,1
1,a,2
2,d,1
3,c,1
3,d,2

输出:

1,c
2,d
3,d

答案 2 :(得分:0)

我可以通过以下步骤实现这一目标。

1. Passing Sorted data(keys are EMP_ID, MOBILE, DEPTID) to an expression.
2. Creating the following variable ports in the expression and getting the counts.
V_CURR_EMP_ID = EMP_ID      
V_CURR_MOBILE = MOBILE          
V_CURR_DEPTID = DEPTID 
V_COUNT =                   
IIF(V_CURR_EMP_ID=V_PREV_EMP_ID AND V_CURR_MOBILE=V_PREV_MOBILE AND V_CURR_DEPTID=V_PREV_DEPTID ,V_COUNT+1,1)
V_PREV_EMP_ID  = EMP_ID 
V_PREV_MOBILE  = MOBILE
V_PREV_DEPTID  = DEPTID
O_COUNT =V_COUNT

3. In the next transformation which is filter, I am taking only the records which have count more than 1 and deleting them using update strategy(DD_DELETE).

这是映射流程。 SQ-> SRTR-> EXP-> FIL-> UPD-> TGT

此外,当我尝试使用聚合器删除它们时,它只删除第一次出现的重复项,但不是全部。

再次感谢您的投入!