Talend tMap左外部联接在第一个表中未匹配的行输出零而不是null

时间:2018-08-30 15:27:35

标签: talend

默认情况下,两个表T1和T2的左连接,返回表T1中所有通过匹配表T2中的结果而连接的行,对于T1中没有匹配的T1行,左连接以空值完成

让T1包含以下行

| id | class | student_id | 
|-------------------------|
|  1 | math  |   null     |
|  2 |  svt  |      1     |

和T2包含以下行:

| id | name | 
|-----------|
|  1 | rach |

T1的结果与T2相连

select * 
from T1 left join T2 on T1.student_id = T2.id

应该是这样的(我抽象了很多细节以显示案例问题)

| id | class | student_id |  id |  name |
|---------------------------------------|
|  1 | math  |   null     | null|  null |
|  2 |  svt  |      1     | 1   |  rach |

在使用tMap进行左连接后,我期望有相同的行为,更重要的是,不匹配的行应使用null而不是零填充

enter image description here

enter image description here

以上图片显示了该实验的简化版本,以展示Talend中的问题 对于表res_partner中不匹配的行,在bref中,输出sales_rep_key的值为零而不是null

任何人都可以向我解释一下。

1 个答案:

答案 0 :(得分:1)

在很大程度上取决于mainlookup行集的用例输入数据。如果我采用您的示例数据库案例并在Talend中实现,我将按照您的期望接收输出。 NULL记录所有不匹配的行/列。

根据您的演示,我看到您正在尝试执行类似- (sales_rep.id == 0) ? context.sales_rep_unko 但是我认为您应该这样使用(下面-组合中的任何一个都可以使用),而不是因为left-join中有tMap而导致行不匹配 (Relational.ISNULL(sales_rep.id) || sales_rep.id.isEmpty() || sales_rep.id.toString() == null)