不了解 TMap 中 Lookup 的过滤表达式

Do not understand Filter Expressions on Lookup in TMap

我有一个非常简单的工作,有 4 'contact' 条记录,其中 2 条具有相同的电子邮件地址

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

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

这是因为:

The Unique match option functions as a Last match. The First match and All matches options function as named.

因此,如果我们删除输入过滤器 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|
'--+------------------+----+------------------'

请注意,查找流程的最后 2 行没有行 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|
'--+------------------+-----'

然后我们可以过滤此输出以获得除了初始流之外的重复行,以满足您的确切要求我不认为我们有义务像这样再次加入此输出:

要获得此输出:

.--+------------------.
|       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        |
'--+------------------+------------'