gpt4 book ai didi

hadoop - apache pig 中的子查询

转载 作者:可可西里 更新时间:2023-11-01 15:19:02 25 4
gpt4 key购买 nike

寻找有关在 apache pig 中编写子查询的帮助。例如我有以下两个关系-

A
sam 12 grad maths
sony 13 postgrad english

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

按主题连接这两个关系,即 A 通过 A.$3 和 B 通过 B.$0 并且必须编写查询,其输出为 -

sam 12 grad maths 4.5
sony 13 postgrad english

基本上它应该检查 B 中的匹配主题,然后在其中查找名称。

最佳答案

我的处理方式是 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将数据放在一起(我正在重命名这些东西以保持头脑清醒):

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,

关于hadoop - apache pig 中的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com