运维开发网

Hive(十三)--Group by 问题:Expression Not In Group By Key

运维开发网 https://www.qedev.com 2020-03-30 15:10 出处:网络
hive又遇到了问题: 原来的MySQL中sql语句为 [sql]  view plain  copy SELECT  DATEBUF, CITYID, CHANNELID FROM STAT_CVCHNEW WHERE DATEBUF>=20110517 AND DATEBUF<=20110519 GROUP BY DATEBUF, CITYID;   得到的结果应该是是按DATEBUF和CIT

hive又遇到了问题:

原来的MySQL中sql语句为

[sql]  view plain  copy
  1. SELECT 
  2. DATEBUF, CITYID, CHANNELID FROM STAT_CVCHNEW WHERE DATEBUF>=20110517 AND DATEBUF<=20110519 GROUP BY DATEBUF, CITYID;  

得到的结果应该是是按DATEBUF和CITYID分组,然后每组对应CHANNELID的第一个值

但在hive中报错

[sql]  view plain  copy
  1. FAILED: SemanticException [Error 10025]: Line 1:20 Expression not in GROUP BY key 'xxxx'  

用hive的udaf函数:collect_set()

改为

[sql]  view plain  copy
  1. SELECT DATEBUF, CITYID, collect_set(CHANNELID) FROM PWD_STAT_CVCHNEW WHERE DATEBUF=20130810 and cityid<3 GROUP BY DATEBUF, CITYID;  
返回的是每一组datebuf和cityid相应的channelid的所有的一个集合

改为

[sql]  view plain  copy
  1. SELECT DATEBUF, CITYID, collect_set(CHANNELID)[0] FROM PWD_STAT_CVCHNEW WHERE DATEBUF=20130810 and cityid<3 GROUP BY DATEBUF, CITYID;  
ok

但返回的结果channelid是以hdfs中存储的顺序的第一个,也可以任意指定下标。

建议有需要group by 之后对非group by的列的处理放在group by之前。

另,sum count等同样的聚合操作是可以对非group by的列进行处理的。

0

精彩评论

暂无评论...
验证码 换一张
取 消