2017-02-27 38 views
0

私は、PKに基づいてテーブルから重複レコードを削除する必要があるインフォーマティアで実装するシナリオを持っています。しかし、私はPK値の最初の発生を維持し、他のものを削除する必要があります(重複したPKの場合)。Informaticaを使用したテーブルからの重複除去

たとえば、ソースに1,1,1,2,3,3,4,5,4があるとします。私は目標データを1,2,3,4,5と見たいと思う。私は同じテーブルからデータを読み込む必要があり、同じテーブルに読み込む必要があります。新しいテーブルを導入することはできません。あなたの意見を参考にしてください。

ありがとうございました!

答えて

1

入力したキーに加えて他の(データ)列があるため、最初のオカレンスが必要です。したがって、あなたは

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

になっ

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

をしたいです?その場合

このマッピングレイアウト試みる:ソータは、sequence_port(DESC) アグリゲータは、キーによってグループに設定されているキーにソートするように設定されている

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

を、そしてsequence_portはすべきソーターの外に出ない

は、あなたが私に従うことを願って:)

1

これを行うための複数の方法がありますが、最も単純すぎるSQLオーバーライドでそれを行うだろう。

上記の例を前提とすると、SQLは次のようになります。一般的な考え方は、(あなたが同じPKで3行を持っている場合、彼らは行番号として1,2,3を持つことになりますので、次のPKのためにリセットされる前に)前に

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

Iアグリゲータを使用してそれらを削除しようとした場合にも、、それはすべての複製の最初の発生を削除していないが。

入力いただきありがとうございます。

関連する問題