今天又get到一个小技能,collect_set函数
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
brand_name,
concat_ws(',', collect_set(brand_classify)) as brand_classify
from tb_brand_classify
group by brand_name;
使用了collect_set函数,是不是感觉很容易就实现了需求。
下面我们来实践操作下,这样印象会更深刻些。
1.创建原始表 品牌分类表 tb_brand_classify
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','家电');
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','饮水机');
3.查询表的数据
select * from tb_brand_classify
执行结果:
4.上述的需求我就可以使用 collect_set 函数来实现, 具体sql如下:
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;
执行结果:
文章开头我们提到了collect_list函数,collect_list与collect_set最大的区别就是列的值不去重;我们把collect_set换成collect_list 执行看下。
select
brand_name,
concat_ws(',', collect_list(brand_classify))
from tb_brand_classify group by brand_name;
发现跟之前是一样的,那是因为我们的类目中没有重复,要是有重复,使用collect_list就会重复了。
需要注意的是collect_set是无序集合,如果需要排序我们可以改成collect_list或sort_array进行排序。
concat_ws(',', sort_array(collect_set(brand_classify), false))
sort_array(e: column, asc: boolean)将array中元素排序(自然排序),默认asc。
好了,今天的分享就先到这。
由于水平有限,文中纰漏之处在所难免,欢迎大家批评指正。
今天又get到一个小技能,collect_set函数相关推荐
- 【每周一个小技能】WSA 安装
Windows11 UI yyds!( : 记录一下WSA安装过程 一.准备过程 1.一台笔记本 (废话!) 2.Windows11系统 (也是废话!) 3.WSA 微软商店链接 : https:// ...
- Python学习,用python制作一个专属有声小说,每天学习一个小技能
这一次的目标是使用百度云的人工智能接口,实现文字转语音的实时转换,将小说文字转换成语音朗读出来. 百度云接口调用 百度的这个接口对于我们普通用户非常友好,他的很多功能都是免费的,而且我们每天可以免费调 ...
- 慌乱之中get到一个小技能----如何将CAJ转换成PDF
现在从中国知网上,很多论文都是 CAJ 格式的,然后 我下载了CAJ 云阅读,能够对CAJ文献进行阅读,可是会经常出现这样的情况,有时候要等上好一会,习惯了快节奏生活的我们,当然不愿意,好的,以后都不 ...
- 【每周一个小技能】Obsidian配合Git实现笔记自动同步
一.码云创建私有库 二.关闭安全模式,安装 Ob Git 三.设置自动同步时间,单位为 分钟
- windows快捷键设置(软件篇)- - 炫酷小技能
windows的软件快捷建设置是为了提供快速打开软件应用的方式,十分方便且十分具有炫酷的一个小技能,通过改变windows的环境变量提供快速打开. 此篇仅为普通的软件打开添加快捷方式,如果需要应用到j ...
- 电商总结(八)如何打造一个小而精的电商网站架构
前面写过一些电商网站相关的文章,这几天有时间,就把之前写得网站架构相关的文章,总结整理一下.把以前的一些内容就连贯起来,这样也能系统的知道,一个最小的电商平台是怎么一步步搭建起来的.对以前的文章感兴趣 ...
- python3转为unicode编码_「小技能get记」· 如何用python3解码unicode
注:#小技能get记#,主要是为了记录日常生活.工作.学习中,get到的一些小小技能,希望可以帮助自己巩固知识,如果正好也能帮助需要的你,那就更好啦! 小小进步,天天get-- 1.故事背景 热爱学习 ...
- 如何打造一个小而精的电商网站架构?
本文大纲: 1. 小型电商网站的架构 2. 日志与监控系统的解决方案 3. 构建数据库的主从架构 4. 基于共享存储的图片服务器架构 5. 移动M站建设 6. 系统容量预估 7. 缓存系统 一.小型电 ...
- 数据处理奇技巧——python数据处理小技能
有人说做数据无非几点:逻辑思路,技术工具和业务需求,1)逻辑思路中涵盖的大多是一些算法.规则: 2)技术工具中主要是python.Excel和SQL: 3)业务逻辑里面则多为一些指标.客群等. 看着很 ...
最新文章
- 《强化学习周刊》第40期:PMIC多智能体强化学习、Lazy-MDPs、CTDS
- 在linux CentOS 上安装chrome 谷歌浏览器
- 初学Node(五)文件I/O
- docker mysql映射端口映射_docker的简单操作和端口映射
- windows2003 DNS服务器配置
- python get方法请求参数_如何解决TypeError get()在使用get方法的Python请求中恰好接受2个参数(给定3个)...
- Deep Glow for mac(AE高级辉光特效插件)支持ae2021
- jemter的竞品分析
- vuejs切换导航条高亮路由高亮做法
- 卫星通信(SATCOM)设备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 服务器芯片的引脚功能,74ls06中文资料汇总(74ls06引脚图及功能_真值表及应用电路)...
- 傅里叶变换:不只是多项式乘法
- WSJ新闻标题的中心词提取
- 经过本人盘点与细数,总结出个人云存储与传统网盘五大差别
- PMP49个过程组知识领域ITTO汇总 -- 项目范围管理
- linux的各种自带库-lz -lrt -lm -lc都是什么库
- 数据挖掘利器 selenium实战案例--论文数据挖掘与可视化分析(上)
- ElasticSearch pinyin分词支持多音字
- c语言 的意思啊,c语言中!1是什么意思啊
- Mathtype和word关联