2017-02-27 73 views
0

我有一個方案要在informatica中實現,我需要從基於PK的表中刪除重複的記錄。但是我需要保持PK值的第一次出現並移除其他值(如果重複PK)。使用Informatica從表中重複刪除

例如,如果我的來源有1,1,1,2,3,3,4,5,4。我想看到我的目標數據爲1,2,3,4,5。我必須從同一個表中讀取數據,並且需要加載到同一個表中,因此不能引入新表。請幫助我的投入。

在此先感謝!

回答

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/

當分揀機設置進行排序,sequence_port(DESC) 而聚合由KEY設置爲組中的關鍵,而sequence_port應不出門分揀機

希望你能跟着我:)

1

有多種方法可以做到這一點,最簡單的就太做在SQL重寫。

假設上面引用的例子,SQL會是這樣的。總的想法是

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 

之前(即下一個PK復位前,所以如果你有3行與同PK他們將有1,2,3的行數)設置了一個主鍵的行號:

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 
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

另外,當我試圖使用聚合器刪除它們時,它只刪除第一次出現重複但不是全部。

再次感謝您的意見!