猪 - 多个连接条件

时间:2016-01-09 04:48:56

标签: apache-pig

我必须在5个表上使用4个连接条件,其中一个表上有过滤条件。

TableB.ColumnX = 'A' and TableB.ColumnY = 'B'

TableA.ColumnA = TableB.ColumnA and
TableB.ColumnB (left outer) = TableC.ColumnB and
TableB.ColumnB  = TableD.ColumnB and
TableD.ColumnB = TableE.ColumnB

这些尝试都是成功的:

(i)过滤为单一陈述 (ii)一个连接条件,每个连接条件为单个语句(表示4个独立的连接语句)

但我希望所有联接组合/合并。

请帮忙解决一些问题。谢谢!

1 个答案:

答案 0 :(得分:2)

由于您希望在连接2个不同的表时加入2个不同的B列(在与TableC连接时与A列连接,在与TableC连接时与B列连接),并且由于它也涉及OUTER连接,因此无法实现此目的SINGLE JOIN声明。

在最小语句中实现这一目标的最佳方法如下:

TableB = FILTER TableB BY ColumnX = 'A' AND ColumnY = 'B';
JoinAB = JOIN TableA BY ColumnA, TableB BY ColumnB;
JoinBDE = JOIN TableB BY ColumnB, TableD BY ColumnB, TableE BY ColumnB
JoinABDE = JOIN JoinAB BY TableB::ColumnB, JoinBDE BY TableB::ColumnB;
JoinABCDE = JOIN JoinABDE BY TableB::ColumnB LEFT OUTER, TableC

来自http://pig.apache.org/docs/r0.7.0/piglatin_ref2.html#JOIN+%28outer%29的Fyi: "外连接仅适用于双向连接;要执行多向外连接,您需要执行多个双向外连接语句"