Hive取非Group by字段数据的方法
来源:互联网 发布:模拟战争软件 编辑:程序博客网 时间:2024/05/14 05:21
遇到这么一个需求,输入数据为一个ID对应多个name,要求输出数据为ID是唯一的,name随便取一个就可以。
执行以下hive ql语句:
1
2
3
4
5
6
SELECT
sid,
class_id
FROM
table2
GROUP BY sid ;
会报错:
1
FAILED:Errorinsemanticanalysis:Line1:18ExpressionnotinGROUPBYkey'class_id'
查了一下,HIVE有这么一个函数collect_set,类似于mysql的group_concat函数,把每个分组的其他字段,按照逗号进行拼接,得到一个最终字符串:
1
2
3
collect_set(col)
返回类型:array
解释:返回一个去重后的对象集合
将上述的QL语句改一下:
1
selectsid,collect_set(class_id)fromtable2groupbysid;
结果是这样的:
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
selectsid,collect_set(class_id)[0]fromtable2groupbysid;
结果如下:
1
2
3
4
5
6
111
211
312
412
516
713
总结:
- Hive不允许直接访问非group by字段;
- 对于非group by字段,可以用Hive的collect_set函数收集这些字段,返回一个数组;
- 使用数字下标,可以直接访问数组中的元素;
参考文章:http://wangjunle23.blog.163.com/blog/static/117838171201310222309391/
本文地址:http://www.crazyant.net/1600.html
0 0
- Hive取非Group by字段数据的方法
- Hive取非Group by字段数据的方法
- Hive 取非 Group by 字段数据的方法
- oracle select非group by的字段
- hive:(group by, having;order by)的使用;group by+多个字段,以及wiki说的group by两种使用限制验证
- hive:(group by, having;order by)的使用;group by+多个字段,以及wiki说的group by两种使用限制验证
- group by 取最新或者最后的一条数据
- mysql group by 涉及到的字段有空数据问题
- hive中的group by字句,正则全中文字段
- MySQL之——GROUP BY分组取字段最大值
- MySQL之——GROUP BY分组取字段最大值
- MySQL之——GROUP BY分组取字段最大值
- Hive – Group By 的实现
- Hive – Group By 的实现
- Hive.GROUP BY子句的“陷阱”
- Hive – Group By 的实现
- hive group by
- Hive group by操作
- javaWeb之jsp+servlet生成报表
- Nginx服务的基本配置
- C语言 :第三章 变量
- HDU 1987 Decoding (模拟)
- mysql进阶(二十八)MySQL GRANT REVOKE用法
- Hive取非Group by字段数据的方法
- php检查代码执行所消耗的时间
- Maven
- mysql主从配置
- hdu5024 Wang Xifeng's Little Plot记忆化搜索
- 用python解决汉诺塔问题
- Java多线程面试常见核心问题总结
- 关于typedef的用法总结
- Java线程池