2014-01-22 71 views
0

我想将下面的连接语句转换成PIG。内部和外部连接在猪的3张桌子

from EXCH e 
JOIN (select a,p, count(buyer) from EXCH group by a, p) sq on e.a = sq.a and e.p = sq.p 
left outer join myimplocal i on e.a = i.a and e.p = i.p and e.f = i.f and i.imp > 0 and e.iswin = 1 

目前,我有这样的:

EXCH2 = FOREACH EXCH GENERATE a, p, buyer; 
EXCH2_groupby = GROUP EXCH2 BY (a, p); 
EXCH_alias_sq = FOREACH EXCH2_groupby GENERATE EXCH2.a, EXCH2.p, COUNT(EXCH2.buyer); 
join_EXCH_and_EXCH_alias_sq = JOIN EXCH by (a, p), EXCH_alias_sq by (a, p); 
myimplocal_filterby_imp_notZero = FILTER myimplocal BY imp > 0; 

我应该做左外连接之前过滤e.iswin=1?我是否应该将过滤器应用到join_EXCH_and_EXCH_alias_sq,然后在myimplocal_filterby_imp_notZero
和我的过滤器别名上进行外部连接?

任何帮助将不胜感激。

+1

请尝试提出答案并显示卡住的位置。 –

回答

0

在我的问题 - 因为e.iswin是在内连接表的结果的outerjoin期间执行的,我不得不使用Union给我正确的结果。 这是我所做的: 数据集1: 1)内加入EXCH_and_EXCH_alias_sq 2)筛选与e.iswin结果= 1, 3)左外与myimplocal

数据组连接的结果在步骤2中2: 1)内加入EXCH_and_EXCH_alias_sq(同上述(1)) 2)筛选与来自数据e.iswin = 0

UNION ONSCHEMA(别名步骤3的结果组1)(别名步骤2,从数据集2)

这给了我正确的结果。