我会接近这个是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,