2015-12-14 18 views
0

我有一個非常簡單的工作有4個「接觸」的記錄,其中其中2具有相同的電子郵件地址不明白過濾器表達式上查找TMap中

mini_Knipsel2.png mini_Knipsel3.png

現在我試着查找記錄具有相同的電子郵件記錄。因此,我加載聯繫人記錄兩次,然後將它們附加到tmap,並使用查找匹配電子郵件地址。使用過濾器表達式,我確保我不會將記錄與自己進行比較。

mini_Knipsel.png.png

結果現在是,只有重複的電子郵件的1標有「重複」和其他記錄不匹配。有人知道爲什麼嗎?

enter image description here

+0

什麼是你的連接設置..你可以點擊設置圖標row2 input..it應列出左外連接,內連接,唯一行所有行...使用所有行和和左外加入 – garpitmzn

+0

@garpitmzn它在「左外連接」上。如果我切換到「所有匹配」,我得到6行返回(這是有道理的),但我只想要4,指標是否有重複的電子郵件或沒有...否則可能呢? –

+0

是的,它應該是..你必須應用過濾器輸出數據集..你應該先刪除row1.id!= row2.id過濾器...並檢查輸出結果..下一步你應該應用過濾器測試(輸出數據集),這是在你的右側.. – garpitmzn

回答

1

這是因爲:

獨特的匹配選項充當最後一場比賽。第一場比賽和 所有匹配的選項功能與命名一樣。

因此,如果我們去掉輸入濾波器row1.id!=row2.id和剛剛離開加入2流,並告訴他們,我們將得到:

|=-+------------------+----+-----------------=| 
|id|mail    |id_1|mail_1   | 
|=-+------------------+----+-----------------=| 
|c1|[email protected]  |c1 |[email protected]  | 
|c2|[email protected] |c2 |[email protected] | 
|c3|[email protected]|c4 |[email protected]| 
|c4|[email protected]|c4 |[email protected]| 
'--+------------------+----+------------------' 

注意,最後2行查找流沒有行c3,因爲Talend提取了匹配[email protected]即c4的最後一行。現在 如果我們濾鏡,通過row1.id!=row2.id我們將只得到第三行是你所擁有的:

|=-+------------------+-----------=| 
|id|mail    |isDuplicated| 
|=-+------------------+-----------=| 
|c1|[email protected]  |false  | 
|c2|[email protected] |false  | 
|c3|[email protected]|true  | 
|c4|[email protected]|false  | 
'--+------------------+------------' 

我們所能做的僅使用一個TMAP是獲得所有獨特的郵件行和重複行的所有次數通過啓用all match選項。

|=-+------------------+----=| 
|id|mail    |isDup| 
|=-+------------------+----=| 
|c1|[email protected]  |false| 
|c2|[email protected] |false| 
|c3|[email protected]|false| 
|c3|[email protected]|true | 
|c4|[email protected]|true | 
|c4|[email protected]|false| 
'--+------------------+-----' 

然後我們可以過濾這個輸出獲得除重複的行初始流量,來填補你的確切要求,我不認爲我們有責任再次加入這個輸出是這樣的: enter image description here

要得到這個輸出:

.--+------------------. 
|  unique  | 
|=-+-----------------=| 
|id|mail    | 
|=-+-----------------=| 
|c1|[email protected]  | 
|c2|[email protected] | 
|c3|[email protected]| 
|c4|[email protected]| 
'--+------------------' 

.--+------------------. 
|  duplicated  | 
|=-+-----------------=| 
|id|mail    | 
|=-+-----------------=| 
|c3|[email protected]| 
|c4|[email protected]| 
'--+------------------' 
.--+------------------+------------. 
|   isDuplicated   | 
|=-+------------------+-----------=| 
|id|mail    |isDuplicated| 
|=-+------------------+-----------=| 
|c1|[email protected]  |false  | 
|c2|[email protected] |false  | 
|c3|[email protected]|true  | 
|c4|[email protected]|true  | 
'--+------------------+------------' 
+0

所以...過濾器在比賽結束後執行?我會期待相反的方向。有什麼辦法可以做我想做的事嗎? –

+0

@WillemMulder編輯答案 – 54l3d

+0

優秀的答案,謝謝!所以只需要確定:過濾(row1.id!= row2.id)在匹配後執行* –