蜂巢:如何做一个SELECT查询输出使用HiveQL一个唯一的主键?(Hive: How to do

2019-10-17 18:08发布

我有我想要改造成可导出到SQL表下面的架构的数据集。 我使用HIVE 。 输入如下

call_id,stat1,stat2,stat3
1,a,b,c,
2,x,y,z,
3,d,e,f,
1,j,k,l,

输出表需要有call_id所以它必须是唯一的主键。 输出模式应该是

call_id,stat2,stat3,
1,b,c, or (1,k,l)
2,y,z,
3,e,f,

问题是,当我使用关键字DISTINCTHIVE查询时, DISTINCT适用于所有colums组合。 我想DISTINCT操作仅适用于call_id 。 对东西的行

SELECT DISTINCT(call_id), stat2,stat3 from intable;

然而,这不是有效的HIVE (我不是很精通SQL其一)。

唯一合法的查询似乎是

SELECT DISTINCT call_id, stat2,stat3 from intable; 

但是,这将返回相同的多个行call_id与其他列不同,整体上该行是不同的。

注:有A,B,C,X,Y,Z等之间没有算术关系,所以平均或求和任何伎俩是不可行的。

任何想法如何,我可以做到这一点?

Answer 1:

一个快速的想法,不是最好的,但会做的工作 -

蜂房>创建表temp1中(一个INT,B串);

蜂房>插入重写表temp1目录

选择CALL_ID,MAX(CONCAT(STAT1, '|',STAT2, '|',STAT3))从由CALL_ID于表组;

蜂房>插入重写表于表

选择,分裂(B, '|')[0],分割(B, '|')[1],分割(B, '|')从temp1中[2];



Answer 2:

,,我想DISTINCT操作仅适用于CALL_ID”

但是,如何将那么蜂巢知道,以消除哪一行?

不知道你有统计领域的数据/大小的量,下面的查询可以工作:

select distinct i1.call_id, i1.stat2, i1.stat3 from (
  select call_id, MIN(concat(stat1, stat2, stat3)) as smin 
  from intable group by call_id
) i2 join intable i1 on i1.call_id = i2.call_id 
  AND concat(i1.stat1, i1.stat2, i1.stat3) = i2.smin;


文章来源: Hive: How to do a SELECT query to output a unique primary key using HiveQL?