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;