如何在HiveQL里面实现group_concat

简介:

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,如需转载请自行联系原作者
目录
相关文章
|
关系型数据库 PostgreSQL
PostgreSQL listagg within group (order by) 聚合兼容用法 string_agg ( order by) - 行列变换,CSV构造...
标签 PostgreSQL , order-set agg , listagg , string_agg , order 背景 listagg — Rows to Delimited Strings The listagg function transforms values from a g...
6334 0
|
SQL 自然语言处理 关系型数据库
【Hive】函数 concat 、concat_ws 、concat_group 的区别
【Hive】函数 concat 、concat_ws 、concat_group 的区别
1212 0
|
9月前
|
关系型数据库 MySQL
MySQL中CONCAT() ,CONCAT_WS() ,GROUP_CONCAT()的用法
MySQL中CONCAT() ,CONCAT_WS() ,GROUP_CONCAT()的用法
55 2
|
9月前
|
SQL 存储 Apache
在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
【2月更文挑战第16天】在 Apache Flink SQL 中,并没有内置的 GROUP_CONCAT 函数
592 2
|
SQL 关系型数据库 MySQL
MySQL中concat()、concat_ws()、group_concat()三个函数的使用技巧案例与心得总结
MySQL中concat()、concat_ws()、group_concat()三个函数的使用
312 0
MySQL中concat()、concat_ws()、group_concat()三个函数的使用技巧案例与心得总结
|
存储 分布式计算 关系型数据库
MaxCompute-udaf实现group_concat或listagg
odps-udaf实现group_concat或listagg
1941 0
|
SQL 数据库
SQL 分组函数 GROUP BY 的基本使用
SQL 分组函数 GROUP BY 的基本使用
362 0
SQL 分组函数 GROUP BY 的基本使用
|
SQL 索引
SQL去重是用DISTINCT好,还是GROUP BY好?
SQL去重是用DISTINCT好,还是GROUP BY好?
SQL去重是用DISTINCT好,还是GROUP BY好?
|
SQL
SQL: select非group by的字段
SQL: select非group by的字段
741 0