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的字段中。