我想做一个包含3个表的外部连接。我试过这个:
features = JOIN group_event by group left outer, group_session by group, group_order by group;
我希望groupu事件的所有行都出现在输出中,即使其他两个关系中的一个或两个都不匹配。
上面的命令不起作用。显然,既然它不应该起作用(http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html#join+%28(外部%29)
Outer joins will only work for two-way joins; to perform a multi-way outer join, you will need to perform multiple two-way outer join statements.
拆分的工作方式如下:
features1 = JOIN group_event by group left outer, group_session by group;
features2 = JOIN features1 by group_event::group left outer, group_order by group;
用一个命令就能做到这一点吗(如果我加入更多的表,会很有用)
1条答案
按热度按时间bkhjykvo1#
我认为在某些时候,我们需要信任文档,不要尝试单命令多外部连接。
为什么?下面的行应该如何工作?
是
LEFT OUTER
为两张table工作,还是只为第一张table工作?如果是前者,那么应该是后者LEFT OUTER
介于b
以及c
删除中不匹配的所有记录b
? 或在a
? 你越是寻找它,它就越没有意义,不是吗?你想做的是
JOIN
关系a
与b
进入ab
然后ab
与c
. 仔细想想,由于中间状态的存在,在一个命令内执行此操作是不自然的ab
.