我會接近這個是flatten的B
關係的方式,然後做一個左外連接到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,