我有一个场景要在informatica中实现,我需要从基于PK的表中删除重复记录。但我需要保留第一次出现的PK值并删除其他值(如果是重复的PK)。
例如,如果我的来源有1,1,1,2,3,3,4,5,4。我想将目标数据看作1,2,3,4,5。我必须从同一个表中读取数据并需要加载到同一个表中。不能引入新表。请帮助我提供您的意见。
提前致谢!
答案 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
此外,当我尝试使用聚合器删除它们时,它只删除第一次出现的重复项,但不是全部。
再次感谢您的投入!