不了解 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 |
'--+------------------+------------'
我有一个非常简单的工作,有 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 |
'--+------------------+------------'