2014-01-22 73 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)

這給了我正確的結果。