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
炸裂,有没有,惊呼: 这样也可以....