Hive Group By 常见错误

摘要:
ExpressionnotinGROUPBYkey“xxx”满足这样一个要求,即输入数据是与多个名称对应的一个ID,输出数据必须是唯一的ID,并且可以选择任何名称。执行以下hiveql语句:123456SELECTsid,class_idFROMtable2GROUPBYsid;将报告错误:1FAILED:错误统计分析:Line1:18 Expressionnoti
Expression notinGROUP BY key ‘ xxx’

遇到这么一个需求,输入数据为一个ID对应多个name,要求输出数据为ID是唯一的,name随便取一个就可以。

执行以下hive ql语句:

 
 
1
2
3
4
5
6
SELECT
  sid,
  class_id
FROM
  table2
GROUP BY sid;

会报错:

 
 
1
FAILED:Error insemantic analysis:Line1:18Expression notinGROUP BY key'class_id'

查了一下,HIVE有这么一个函数collect_set,类似于mysql的group_concat函数,把每个分组的其他字段,按照逗号进行拼接,得到一个最终字符串:

 
 
1
2
3
collect_set(col)
返回类型:array
解释:返回一个去重后的对象集合

将上述的QL语句改一下:

 
 
1
select sid,collect_set(class_id)from table2 group by sid;

结果是这样的:

 
 
1
2
3
4
5
6
1[11,12,13]
2[11,14]
3[12,15]
4[12,13]
5[16,14]
7[13,15]

这个时候,我们就可以针对第二列做一些计数、求和操作,分别对应到Hive的聚合函数count、sum。

对应到本文的目的,直接从数组获取第一个元素就达到目的了,这样做:

 
 
1
select sid,collect_set(class_id)[0]from table2 group by sid;

结果如下:

 
 
1
2
3
4
5
6
111
211
312
412
516
713

总结:

  1. Hive不允许直接访问非group by字段;
  2. 对于非group by字段,可以用Hive的collect_set函数收集这些字段,返回一个数组;
  3. 使用数字下标,可以直接访问数组中的元素;

参考文章:http://wangjunle23.blog.163.com/blog/static/117838171201310222309391/

本文地址:http://www.crazyant.net/1600.html

免责声明:文章转载自《Hive Group By 常见错误》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇网络通信框架Retrofit2iptables禁止端口和开放端口下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Spark(十二)SparkSQL简单使用

一、SparkSQL的进化之路 1.0以前:   Shark 1.1.x开始:SparkSQL(只是测试性的)  SQL 1.3.x:          SparkSQL(正式版本)+Dataframe 1.5.x:          SparkSQL 钨丝计划 1.6.x:       SparkSQL+DataFrame+DataSet(测试版本)  ...

Hive on Spark 和Hive on mr执行结果不一致原因剖析

一、Hive 执行引擎概述 目前hive执行引擎支持三种,包括mr、spark和Tz;mr是hive最早支持的数据类型,执行速度最慢,但是性能上也是最为稳定的;spark和Tz是后续支持的执行引擎,也是将hive的SQL语句转换为spark可以识别的sparksql语句进行执行。 二、当有空表出现时,spark和mr执行引擎结果不一样问题排查 示例:sel...

Hive 表结构操作

添加列  add columns     alter table table_name add columns (id int comment '主键ID' ) ;     默认在表所有字段之后,分区字段之前。 替换列 replace columns ,会替换所有列,慎用     alter table table_name replace column...

Hive 接口介绍(Web UI/JDBC)

Hive 接口介绍(Web UI/JDBC) 实验简介 本次实验学习 Hive 的两种接口:Web UI 以及 JDBC。 一、实验环境说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: XfceTerminal:...

用java api 实现查询 Hive 数据

版本:cdh5.4.7, hive1.1.0 pom文件          <dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-jdbc</artifactId> <version>1...

将Mongodb的表导入到Hive中

1.官方文档:https://docs.mongodb.com/ecosystem/tools/hadoop/ 2.Hive介绍:   Hive特点:     1.hive是一个数据仓库,和oracle,mysql等数据仓库相比,它底层依赖于hdfs。   2.hive是sql解析引擎,将sql语句转换成Map/Reduce任务,然后在hadoop hdf...