猪:超过2个关系的外部连接
Posted
技术标签:
【中文标题】猪:超过2个关系的外部连接【英文标题】:Pig: Outer join on more than 2 relations 【发布时间】:2012-10-30 00:51:22 【问题描述】:我想做一个涉及 3 个表的外连接。我试过这个:
features = JOIN group_event by group left outer, group_session by group, group_order by group;
我希望 group_event 的所有行都出现在输出中,即使其他 2 个关系中的一个或两者都不匹配。
上面的命令不起作用。显然因为它不应该工作(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】:我认为在某些时候,我们需要信任文档,不要尝试单个命令多个外部连接。
为什么?以下行应该如何工作?
JOIN a BY a1 LEFT OUTER, b BY b1, c BY c1
LEFT OUTER
是否适用于两个表,还是只适用于第一个?如果是前者,那么b
和c
之间的LEFT OUTER
是否应该删除所有在b
中不匹配的记录?还是在a
?你越寻找它,它就越没有意义,不是吗?
您想要做的是 JOIN
关系 a
与 b
到 ab
然后 ab
与 c
。如果您考虑一下,由于中间状态ab
,在单个命令中执行它是不自然的。
【讨论】:
以上是关于猪:超过2个关系的外部连接的主要内容,如果未能解决你的问题,请参考以下文章