Hive查询非Group By字段

示例表结构和数据:

hive> desc test2;
OK
id                      int                                         
value                   string                                      
Time taken: 0.024 seconds, Fetched: 2 row(s)

hive> select * from test2;
OK
1   a
1   b
2   c
3   d
Time taken: 0.042 seconds, Fetched: 4 row(s)



如下SQL语句在MySQL中是比较常见的写法,但是在Hive中缺不行:

select id, value from test2 group by id;

在Hive中执行会报错:
FAILED: SemanticException [Error 10025]: Line 1:10 Expression not in GROUP BY key 'value'
当使用group by字句,select语句,只能包含group by包含的列。当然,在select语句,可以有多个聚合函数(例如count)

-- 聚合函数是可以的
select id, count(*) from test2 group by id;

解决办法


  • 第一种方式: 妥协。一般group by后还要查非分组字段,如果业务上这个字段也是相同的,将这个字段也加入到group by中
select id,value from test2 group by id,value;
  • 第二种方式:collect_set()
hive> select id,collect_set(value) from test2 group by id;

1   ["b","a"]
2   ["c"]
3   ["d"]

更神奇的来了:

hive> select id, collect_set(value)[0] from test2 group by id;

1   a
2   c
3   d

炸裂,有没有,惊呼: 这样也可以....

标签: Hive

6.66, 感谢你的支持,我会继续努力!
扫码打赏,建议金额1-10元

Powered By 畅言云评
提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!