我有下面的模式数据集,我想把它转换成一个可以导出到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,
问题是当我使用关键字 DISTINCT
在 HIVE
查询,查询 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等之间没有算术关系,因此任何求平均或求和的技巧都是不可行的。
有什么办法吗?
2条答案
按热度按时间9bfwbjaz1#
,,我只想对调用id应用distinct操作“
但是Hive怎么知道要消除哪一行呢?
在不知道您拥有的stat字段的数据量/大小的情况下,可以执行以下查询:
y53ybaqx2#
一个快速的想法,不是最好的,但会做的工作-
配置单元>创建表temp1(a int,b string);
配置单元>插入覆盖表temp1
从intable group by call|id中选择call|id,max(concat(stat1,“|”,stat2,“|”,stat3));
配置单元>插入覆盖表
从temp1中选择a、split(b,“|”)[0]、split(b,“|”)[1]、split(b,“|”)[2];