【问题标题】:Pig: Outer join on more than 2 relations猪:超过2个关系的外部连接
【发布时间】: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;

有什么想法可以在单个命令中执行此操作吗? (如果要加入更多数量的表会很有用)

【问题讨论】:

    标签: join apache-pig bigdata


    【解决方案1】:

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

    为什么?以下行应该如何工作?

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-05-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 2016-10-24
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多