猪:外面加入两个以上的关系

时间:2012-10-30 00:51:22

标签: join apache-pig bigdata

我想做一个涉及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;

在单个命令中执行此操作的任何想法? (如果加入更多数量的表,将会很有用)

1 个答案:

答案 0 :(得分:1)

我认为在某些时候,我们需要信任文档,不要尝试单个命令多个外连接。

为什么呢?以下几行应如何运作?

JOIN a BY a1 LEFT OUTER, b BY b1, c BY c1

LEFT OUTER是否适用于两个表,还是仅适用于第一个表?如果是前者,则LEFT OUTERb之间的c是否应删除b中未匹配的所有记录?还是在a?你找的越多,它的意义就越小,不是吗?

您要做的是将JOIN关系ab合并为ab,然后abc。如果您考虑一下,由于中间状态ab,在单个命令中执行它是不自然的。