2012-01-09 111 views
1

尋找一些幫助在阿帕奇豬編寫子查詢。例如,我有以下兩個關係 -阿帕奇豬子查詢

A 
sam 12 grad maths 
sony 13 postgrad english 

B 
maths {(4.5,sam),(4,david)} 
english {(4.2,peter),(3.9,rob)} 

加入這兩個關係的主題,即一個由A. $ 3和B由B $ 0,必須編寫查詢,這將給輸出 -

sam 12 grad maths 4.5 
sony 13 postgrad english 

基本上它應該檢查B中的匹配主題,然後在其中查找名稱。

回答

2

我會接近這個是flattenB關係的方式,然後做一個左外連接到A.

首先,扁平化的關係了:

C = FOREACH B GENERATE $0, FLATTEN($1); 

這意味着你的約會到:

maths, 4.5, sam 
maths, 4, david 
english, 4.2, peter 
english, 3.9, rob 

現在,你可以做一個JOIN帶來的數據一起(我重命名這個東西讓我的頭straig ht):

J = JOIN A BY (Aname, Asubject), C BY (Bname, Bsubject); 
J2 = FOREACH J GENERATE Astudent, Agrade, Alevel, Asubject, Bscore; 

dump J2只會輸出sam, 12, grad, maths, 4.5

但是,有一個問題。如果列表A中的項目沒有顯示在列表B中,您似乎希望獲得NULL的值。這是LEFT OUTER join的工作,幸運的是,Pig can do outer joins。修改上面的代碼如下:

J = JOIN A BY (Aname, Asubject) LEFT OUTER, C BY (Bname, Bsubject); 
J2 = FOREACH J GENERATE Astudent, Agrade, Alevel, Asubject, Bscore; 

dump J2在這裏會輸出,這是我想你想:

sam, 12, grad, maths, 4.5 
sony, 13, postgrad, english,