(hortonworks沙盒)pig联接操作复制主键列

uemypmqf  于 2021-06-24  发布在  Pig
关注(0)|答案(2)|浏览(274)

我想加入两个表。表1有id和value列。
表2有id和color列。

final = join table1 by id, table2 by id;
dump final;

我收到的表的列是id,value,id,color。但是我想得到一个表,它有id、value和color这样的列。如何从此表中删除此重复id列?

hvvq6cgz

hvvq6cgz1#

如果你这样做了 DESCRIBE final; 您将看到模式如下所示:

final: {table1::id: chararray,table1::value: chararray,table2::id: chararray,table2::color: chararray}

要区分这两个id列,可以使用 table1::id 或者 table2::id . 因此,要删除其中一个重复列,可以执行以下操作:

A = FOREACH final GENERATE 
    table1::id AS id,
    table1::value AS value,
    table2::color AS color;

(我还重新命名了字段以除去 table1:: 以及 table2:: 前缀,因为它们不再是必需的。)
我也可以这样做:

A = FOREACH final GENERATE 
    table1::id AS id,
    value AS value,
    color AS color;

这不会给我一个错误,因为 value 以及 color 都是明确的名字。

lstz6jyr

lstz6jyr2#

执行最后的Pig脚本:

grunt> table1 = LOAD 'table1_input_path' USING PigStorage(',') as (id:int, value:int);
grunt> table2= LOAD 'table2_input_path' USING PigStorage(',') as (id:int, color:chararray);
grunt> joinlevel = JOIN table1 BY id, table2 BY id;
grunt> final = FOREACH joinlevel generate table1::id as id, table1::color as color, table2::value as value;
grunt> dump final;

相关问题