在Hortonworks Sandbox中Pig Join操作如何去除重复主键列
解决Join后重复id列的问题
嘿,这个场景我太熟悉了!当你按id连接两张都包含id列的表时,默认的join操作确实会把两个id都带进来,但其实有两种简单的方式可以得到你想要的只含id、value、color的结果:
方法1:Join时直接避免重复列(推荐)
在执行join之前,先把其中一张表的id设为主键,这样join的时候就只会保留一份id列。从你的语句风格来看像是kdb+的q语言,写法可以是这样:
// 把table2的id设为主键,再和table1左连接(如果要内连接换成ej) final = table1 lj `id xkey table2; dump final;
或者更直观地用列选择的方式完成join:
final = select id, value, color from table1 j `id xkey table2; dump final;
xkey会把table2的id列标记为主键,join操作就会自动复用这个主键列,不会重复添加。
方法2:对已有结果去重列
如果已经得到了包含重复id的结果表,直接筛选出你需要的列就行——因为两个id列的值是完全相等的(毕竟是按id join的),取任意一个都可以:
final = select id:first id, value, color from (join table1 by id, table2 by id); dump final;
这里用first id提取第一个id列的值,同时保留value和color,就能得到你要的结构。
要是你用的是SQL,写法会更直白:
SELECT t1.id, t1.value, t2.color FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id;
核心思路都是要么在join阶段就避免引入重复列,要么在结果里精准选择需要的列~
内容的提问来源于stack exchange,提问作者ECE IŞIK
相关产品推荐
相关产品推荐

