Apache pig pig脚本:使用空值连接表
我想连接两个表,但我对不同类型的连接有点迷茫Apache pig pig脚本:使用空值连接表,apache-pig,Apache Pig,我想连接两个表,但我对不同类型的连接有点迷茫 A(a_name:chararray, a_number:int) a 1 b 2 c d 3 e B(b_id:int, b_name:chararray) 1 one 2 two 3 three 我知道我需要某种形式的加入,但是 AB = JOIN A by a_number, B by b_id; FOREACH AB GENERATE a_name, b_name as
A(a_name:chararray, a_number:int)
a 1
b 2
c
d 3
e
B(b_id:int, b_name:chararray)
1 one
2 two
3 three
我知道我需要某种形式的加入,但是
AB = JOIN A by a_number, B by b_id;
FOREACH AB GENERATE
a_name,
b_name as a_number;
我明白了
而不是
a one
b two
c
d three
e
这是我真正想要的。
我该怎么做
编辑:
好的,我尝试了左连接,但它没有保持行顺序,而是返回
a one
b two
d three
c
e
有什么解决办法吗?您正在寻找解决方案。这将使所有值保持在关系的左侧,即使它们不显示在右侧。Pig默认为内部
连接
,因此它只保留两侧的值
这将产生您所期望的结果
AB = JOIN A by a_number LEFT, B by b_id;
C = FOREACH AB GENERATE a_name, b_name AS a_number;
此外,您应该能够将这两种关系压缩为:
AB = FOREACH (JOIN A by a_number LEFT, B by b_id)
GENERATE a_name, b_name AS a_number;
据我所知,
JOIN
中没有任何选项可以颠倒左关系的顺序。但是,您可以事先A
,然后在RANK
之后创建编号JOIN
啊,当然了。非常感谢。那张左图很有用,提醒我也看看其他的。如果我最终还记得join做了什么的话。一个小小的更正:语法实际上是'AB=join A by A_number LEFT,B by B_id;'左联接不能保持行顺序。“有什么解决办法吗?”克劳舍里纽斯谢谢你的纠正。我已经用一种方法更新了我的答案。
AB = FOREACH (JOIN A by a_number LEFT, B by b_id)
GENERATE a_name, b_name AS a_number;