MySQL里面有一个强大的group_concat函数,可以把group by的结果聚集到同一行中,
比如下面这样的表:
uid | iid |
1 | 101 |
1 | 102 |
1 | 103 |
2 |
104 |
3 |
105 |
select uid, group_concat(iid) from xxx group by uid
执行之后结果类似于:
1 | 101,102,103 |
2 | 104 |
3 | 105 |
但是HiveQL里面却没有这样的东东,那有没有办法可以实现类似的功能呢?
答案是肯定的,那就是collect_set函数,这个是Hive内置的UDAF函数,
可以将多行记录聚集到一个array里面,用法跟group_concat差不多,唯一不同的是,collect_set会将重复记录剔除(集合的基本特性),并且由于它返回的是一个array对象,所以必须使用相关的函数来操作里面的数据,如size(),可以得到这个array的大小;或者array_contains(),判断某个数据是否在集合中,等等。具体请参考hive官方手册。
本文转自 kevx 51CTO博客,原文链接:http://blog.51cto.com/spinlock/1266236,如需转载请自行联系原作者