collect_set函数
今天又get到一个小技能,掌握了hive一个关于列转行专用函数 collect_set函数。
在这里做个学习笔记。
collect_set是Hive内置的一个聚合函数, 结果返回一个消除了重复元素的对象集合, 其返回值类型是 array 。
和collect_set相似的还有另一个函数collect_list,这个我们后面再谈。
在实际应用中,我们可能会遇到需要类似这样的一个需求,就是需要查出各个品牌对应的所有分类,
品牌分类表数据结构大概是这样的:
brand_name,brand_classify
品牌1 家电
品牌1 家具
品牌1 数码
品牌2 空调
品牌2 饮水机
期望的结果是:
品牌1 家电,家具,数码
品牌2 空调,饮水机
这时候我们就可以使用collect_set函数来实现我们的需求。
select使用了collect_set函数,是不是感觉很容易就实现了需求。
brand_name,
concat_ws(',', collect_set(brand_classify)) as brand_classify
from tb_brand_classify
group by brand_name;
drop table if exists tb_brand_classify;create table if not exists tb_brand_classify (brand_name string, brand_classify string);2.初始化数据
insert into table tb_brand_classify values('品牌1','家电');3.查询表的数据
insert into table tb_brand_classify values('品牌1','家具');
insert into table tb_brand_classify values('品牌1','数码');
insert into table tb_brand_classify values('品牌2','空调');
insert into table tb_brand_classify values('品牌2','饮水机');
select * from tb_brand_classify执行结果:
select执行结果:
brand_name,
concat_ws(',', collect_set(brand_classify)) as brand_classify
from tb_brand_classify
group by brand_name;
select执行结果:
brand_name,
collect_set(brand_classify)[0]
from tb_brand_classify
group by brand_name;
select发现跟之前是一样的,那是因为我们的类目中没有重复,要是有重复,使用collect_list就会重复了。
brand_name,
concat_ws(',', collect_list(brand_classify))
from tb_brand_classify group by brand_name;
concat_ws(',', sort_array(collect_set(brand_classify), false))sort_array(e: column, asc: boolean)将array中元素排序(自然排序),默认asc。
免责申明:
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu
《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack