hive 中的多列进行group by查询方法
2014-02-28 13:28
344 查看
在工作中用hive进行数据统计的时候,遇到一个用group by 进行查询的问题,需要统计的字段为
gid,sid,user,roleid,time,status,map_id,num
其中time字段为时间戳形式的,统计要求为将各个字段按照每个小时的num总数进行统计
开始的时候写的hive SQL为
select gid,sid,user,roleid,time,status,map_id,sum(num) from test group by gid,sid,user,roleid,from_unixtime(time,'yyyyMMddHHmmss'),9,2),time,status,map_id;
在hive中执行后发现结果不对,hive是按照time字段进行的group by,于是将group by中的time字段去掉
select gid,sid,user,roleid,time,status,map_id,sum(num) from test group by gid,sid,user,roleid,from_unixtime(time,'yyyyMMddHHmmss'),9,2),status,map_id;
hive返回错误FAILED: Error in semantic analysis: Line 1:27 Expression not in GROUP BY key time
如果修改sql为
select gid,sid,user,roleid,from_unixtime(time,'yyyyMMddHHmmss'),9,2),status,map_id,sum(num) from test group by gid,sid,user,roleid,from_unixtime(time,'yyyyMMddHHmmss'),9,2),status,map_id;
可以按照小时进行汇总统计,可是字段time不是想要显示的结果,最后经过google查到方法
select gid,sid,user,roleid,collect_set(time)[0],status,map_id,sum(num) from test group by gid,sid,user,roleid,substr(from_unixtime(time,'yyyyMMddHHmmss'),9,2),status,map_id;
参考网址http://stackoverflow.com/questions/5746687/hive-expression-not-in-group-by-key
看来对hive的udf函数还是掌握的不够,需要多学习
gid,sid,user,roleid,time,status,map_id,num
其中time字段为时间戳形式的,统计要求为将各个字段按照每个小时的num总数进行统计
开始的时候写的hive SQL为
select gid,sid,user,roleid,time,status,map_id,sum(num) from test group by gid,sid,user,roleid,from_unixtime(time,'yyyyMMddHHmmss'),9,2),time,status,map_id;
在hive中执行后发现结果不对,hive是按照time字段进行的group by,于是将group by中的time字段去掉
select gid,sid,user,roleid,time,status,map_id,sum(num) from test group by gid,sid,user,roleid,from_unixtime(time,'yyyyMMddHHmmss'),9,2),status,map_id;
hive返回错误FAILED: Error in semantic analysis: Line 1:27 Expression not in GROUP BY key time
如果修改sql为
select gid,sid,user,roleid,from_unixtime(time,'yyyyMMddHHmmss'),9,2),status,map_id,sum(num) from test group by gid,sid,user,roleid,from_unixtime(time,'yyyyMMddHHmmss'),9,2),status,map_id;
可以按照小时进行汇总统计,可是字段time不是想要显示的结果,最后经过google查到方法
select gid,sid,user,roleid,collect_set(time)[0],status,map_id,sum(num) from test group by gid,sid,user,roleid,substr(from_unixtime(time,'yyyyMMddHHmmss'),9,2),status,map_id;
参考网址http://stackoverflow.com/questions/5746687/hive-expression-not-in-group-by-key
看来对hive的udf函数还是掌握的不够,需要多学习
相关文章推荐
- hive 中的多列进行group by查询方法
- hive 中的多列进行group by查询方法
- 在sql server里,日期字段按天数进行group by查询的方法
- Hive 显示分区,根据分区进行查询的方法
- SQL中对日期进行模糊查询的方法
- MySQL中使用group by进行分组时,子查询中order by失效的问题
- 怎么对数据库查询进行group by 和sum() 操作
- shell自动连接mysql后进行查询操作的方法
- 构造使用IN子句的动态Transact-SQL方法进行编号查询
- EF 利用PagedList进行分页并结合查询 方法2
- Hive高级查询(group by、 order by、 join等)
- spring data jpa 创建方法名进行简单查询
- 在Spark中使用UDF对HIVE表进行查询,再将查询结果RDD写入另一个HIVE表
- 在Mybaties中进行数据查询时,表中字段名和属相名没有对应起来,查询的结果总null,一下是解决方法
- Excel 中使用SQL 语句查询数据(八)-----用Group by 进行分组统计
- Ruby on Rails,使用where方法对持久化对象进行条件查询
- 【SQL】两个带order by查询进行union all报ORA-00933错误的解决方法
- Hive 取非 Group by 字段数据的方法
- 对查询结果进行分页的方法
- CDH5.9 hive查询表注释为乱码解决方法