我想在两个表(A和B)之间加入,我想插入不在表B中但不在交叉点上的行(就像我在图片上显示的那样),将它们插入表B中。
如果我在sql上,我可以这样做:
SELECT *
FROM A
LEFT JOIN B ON A.key = B.key
WHERE B.key IS NULL
但是在ODI上。我无法做到。我只是讨论了左外连接,但它没有解决我的问题,通过左外连接我可以获取表A上的所有行和A和B交叉点上的行。
我需要的只是提取表A上的所有行而不包含交叉点上的行。我怎样才能在ODI上解决这个问题
非常感谢你的帮助。
答案 0 :(得分:1)
这应该有效:
WHERE B.key IS NULL
答案 1 :(得分:0)
如果您使用的是ODI 11g,则可以在黄色(临时)界面中进行连接,它们会在蓝色界面中重用该界面,您可以在其中应用过滤器。确保在蓝色界面中的源上选择“用作派生语句(子选择)”。通过这样做,黄色界面将是一个子查询,并且您确定在连接后应用了过滤器。
如果您使用的是ODI 12c,则可以在数据集组件中进行连接,并在数据集的输出上添加过滤器。因此,您确定在加入后应用了过滤器。
答案 2 :(得分:0)
你应该能够让ODI生成你提供的SQL,而不需要求助于基于集合的操作(MINUS),这也应该表现得更好。
您能否确保在映射中拆分逻辑并将A.key = B.key
条件放入JOIN并将分开过滤器B.key IS NULL
?