猪:超过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 是否适用于两个表,还是只适用于第一个?如果是前者,那么bc 之间的LEFT OUTER 是否应该删除所有在b 中不匹配的记录?还是在a?你越寻找它,它就越没有意义,不是吗?

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

【讨论】:

以上是关于猪:超过2个关系的外部连接的主要内容,如果未能解决你的问题,请参考以下文章

PetaPOCO和超过4个加入

JPA 支持没有对象关系映射的外部连接

使用 Hadoop 配置猪关系

将 xlsx 文件加载到猪关系中

Apache Pig - 在猪关系中加载时缺少数字数据

关系数据库中连接池的机制是什么?