我想做一个涉及3个表的外连接。我试过这个:
features = JOIN group_event by group left outer, group_session by group, group_order by group;
我希望group_event的所有行都出现在输出中,即使其他两个关系中的一个或两个都没有匹配。
上面的命令不起作用。显然,因为它不应该工作(http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html#JOIN+%28outer%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;
在单个命令中执行此操作的任何想法? (如果加入更多数量的表,将会很有用)
答案 0 :(得分:1)
我认为在某些时候,我们需要信任文档,不要尝试单个命令多个外连接。
为什么呢?以下几行应如何运作?
JOIN a BY a1 LEFT OUTER, b BY b1, c BY c1
LEFT OUTER
是否适用于两个表,还是仅适用于第一个表?如果是前者,则LEFT OUTER
和b
之间的c
是否应删除b
中未匹配的所有记录?还是在a
?你找的越多,它的意义就越小,不是吗?
您要做的是将JOIN
关系a
与b
合并为ab
,然后ab
加c
。如果您考虑一下,由于中间状态ab
,在单个命令中执行它是不自然的。