hive常见问题(三)---Expression not in GROUP BY

FAILED: SemanticException [Error 10025]: Line 1:59 Expression not in GROUP BY key 'guid'


最近在使用hive时会出现这样的问题

insert overwrite table session_info_temp1
select 
sessionid,
guid,
enduserid,
url,
max(unix_timestamp(trackTime))-min(unix_timestamp(trackTime)),
from_unixtime(min(unix_timestamp(trackTime))),
max(ip),max(provinceid) 
from default.track_log where data='20150828' 
group by sessionid;

我们本来是根据sessionid进行group by,这样同样的sessionid就会到同一个组里面。形成的是一个集合。

但是在hive里面,如果使用select进行查询,查询了某一个具体的一行值,例如这个例子中查询了某一个guid,因为一组里面的guid可能有很多种,那么就不能知道选择哪个好,处于这样的原因,hive不准进行这样的查询。但是可以搭配聚合函数使用。比如max(guid)等等。

现在就有集中方法解决这样的问题。

搭配聚合函数使用

 select session_id,max(guid),max(user_id) from session_info_temp1 group by session_id;

使用collect_set(...)[0]

同一组就像一个数组一样,可以通过索引访问。

但是只能选取一组中的某一个。且其他值比如guid字段就只能选取一个

select session_id,collect_set(guid)[0],collect_set(user_id)[0] from session_info_temp1 group by session_id;

最后一种就是,如果要想关心那个guid字段,就可以干脆将这个字段一个group by

select session_id,guid,user_id from session_info_temp1 group by session_id,guid,user_id;

这样,也不用担心各种各样的问题了。因为guid和user_id都在group by的字段中。

发布了66 篇原创文章 · 获赞 31 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43272605/article/details/100936798