不了解TMap中的查找过滤器表达式

时间:2015-12-14 12:42:55

标签: talend

我有一份非常简单的工作,有4个“联系”记录,其中2个有相同的电子邮件地址

mini_Knipsel2.png mini_Knipsel3.png

现在我尝试查找记录具有相同的电子邮件记录。所以我加载了两次联系人记录,然后将它们附加到tmap,并使用查找来匹配emailaddress。使用过滤器表达式,我确保不将记录与自己进行比较。

mini_Knipsel.png.png

现在的结果是,只有1个重复的电子邮件被标记为“重复”,而其他记录则不匹配。有人知道为什么吗?

enter image description here

1 个答案:

答案 0 :(得分:1)

这是因为:

  

唯一匹配选项用作最后一个匹配。第一场比赛和   所有匹配选项都以命名方式运行。

因此,如果我们删除输入过滤器row1.id!=row2.id并刚刚离开加入2个流并显示它们,我们将得到:

|=-+------------------+----+-----------------=|
|id|mail              |id_1|mail_1            |
|=-+------------------+----+-----------------=|
|c1|some@mail.com     |c1  |some@mail.com     |
|c2|other@mail.com    |c2  |other@mail.com    |
|c3|identical@mail.com|c4  |identical@mail.com|
|c4|identical@mail.com|c4  |identical@mail.com|
'--+------------------+----+------------------'

请注意,查找流的最后两行没有行c3,因为Talend获取了匹配identical@mail.com的最后一行,即c4。 现在,如果我们按row1.id!=row2.id过滤它,我们将只得到你得到的第三行:

|=-+------------------+-----------=|
|id|mail              |isDuplicated|
|=-+------------------+-----------=|
|c1|some@mail.com     |false       |
|c2|other@mail.com    |false       |
|c3|identical@mail.com|true        |
|c4|identical@mail.com|false       |
'--+------------------+------------'

我们只使用一个tMap可以通过启用all match选项获取所有唯一邮件行和所有重复行。

|=-+------------------+----=|
|id|mail              |isDup|
|=-+------------------+----=|
|c1|some@mail.com     |false|
|c2|other@mail.com    |false|
|c3|identical@mail.com|false|
|c3|identical@mail.com|true |
|c4|identical@mail.com|true |
|c4|identical@mail.com|false|
'--+------------------+-----'

然后我们可以过滤此输出以获得除初始流之外的重复行,以填充您的确切要求我不认为我们有义务再次加入此输出,如下所示: enter image description here

获得此输出:

.--+------------------.
|       unique        |
|=-+-----------------=|
|id|mail              |
|=-+-----------------=|
|c1|some@mail.com     |
|c2|other@mail.com    |
|c3|identical@mail.com|
|c4|identical@mail.com|
'--+------------------'

.--+------------------.
|     duplicated      |
|=-+-----------------=|
|id|mail              |
|=-+-----------------=|
|c3|identical@mail.com|
|c4|identical@mail.com|
'--+------------------'
.--+------------------+------------.
|           isDuplicated           |
|=-+------------------+-----------=|
|id|mail              |isDuplicated|
|=-+------------------+-----------=|
|c1|some@mail.com     |false       |
|c2|other@mail.com    |false       |
|c3|identical@mail.com|true        |
|c4|identical@mail.com|true        |
'--+------------------+------------'