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函数相关推荐

  1. 【每周一个小技能】WSA 安装

    Windows11 UI yyds!( : 记录一下WSA安装过程 一.准备过程 1.一台笔记本 (废话!) 2.Windows11系统 (也是废话!) 3.WSA 微软商店链接 : https:// ...

  2. Python学习,用python制作一个专属有声小说,每天学习一个小技能

    这一次的目标是使用百度云的人工智能接口,实现文字转语音的实时转换,将小说文字转换成语音朗读出来. 百度云接口调用 百度的这个接口对于我们普通用户非常友好,他的很多功能都是免费的,而且我们每天可以免费调 ...

  3. 慌乱之中get到一个小技能----如何将CAJ转换成PDF

    现在从中国知网上,很多论文都是 CAJ 格式的,然后 我下载了CAJ 云阅读,能够对CAJ文献进行阅读,可是会经常出现这样的情况,有时候要等上好一会,习惯了快节奏生活的我们,当然不愿意,好的,以后都不 ...

  4. 【每周一个小技能】Obsidian配合Git实现笔记自动同步

    一.码云创建私有库 二.关闭安全模式,安装 Ob Git 三.设置自动同步时间,单位为 分钟

  5. windows快捷键设置(软件篇)- - 炫酷小技能

    windows的软件快捷建设置是为了提供快速打开软件应用的方式,十分方便且十分具有炫酷的一个小技能,通过改变windows的环境变量提供快速打开. 此篇仅为普通的软件打开添加快捷方式,如果需要应用到j ...

  6. 电商总结(八)如何打造一个小而精的电商网站架构

    前面写过一些电商网站相关的文章,这几天有时间,就把之前写得网站架构相关的文章,总结整理一下.把以前的一些内容就连贯起来,这样也能系统的知道,一个最小的电商平台是怎么一步步搭建起来的.对以前的文章感兴趣 ...

  7. python3转为unicode编码_「小技能get记」· 如何用python3解码unicode

    注:#小技能get记#,主要是为了记录日常生活.工作.学习中,get到的一些小小技能,希望可以帮助自己巩固知识,如果正好也能帮助需要的你,那就更好啦! 小小进步,天天get-- 1.故事背景 热爱学习 ...

  8. 如何打造一个小而精的电商网站架构?

    本文大纲: 1. 小型电商网站的架构 2. 日志与监控系统的解决方案 3. 构建数据库的主从架构 4. 基于共享存储的图片服务器架构 5. 移动M站建设 6. 系统容量预估 7. 缓存系统 一.小型电 ...

  9. 数据处理奇技巧——python数据处理小技能

    有人说做数据无非几点:逻辑思路,技术工具和业务需求,1)逻辑思路中涵盖的大多是一些算法.规则: 2)技术工具中主要是python.Excel和SQL: 3)业务逻辑里面则多为一些指标.客群等. 看着很 ...

最新文章

  1. 《强化学习周刊》第40期:PMIC多智能体强化学习、Lazy-MDPs、CTDS
  2. 在linux CentOS 上安装chrome 谷歌浏览器
  3. 初学Node(五)文件I/O
  4. docker mysql映射端口映射_docker的简单操作和端口映射
  5. windows2003 DNS服务器配置
  6. python get方法请求参数_如何解决TypeError get()在使用get方法的Python请求中恰好接受2个参数(给定3个)...
  7. Deep Glow for mac(AE高级辉光特效插件)支持ae2021
  8. jemter的竞品分析
  9. vuejs切换导航条高亮路由高亮做法
  10. 卫星通信(SATCOM)设备的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  11. 服务器芯片的引脚功能,74ls06中文资料汇总(74ls06引脚图及功能_真值表及应用电路)...
  12. 傅里叶变换:不只是多项式乘法
  13. WSJ新闻标题的中心词提取
  14. 经过本人盘点与细数,总结出个人云存储与传统网盘五大差别
  15. PMP49个过程组知识领域ITTO汇总 -- 项目范围管理
  16. linux的各种自带库-lz -lrt -lm -lc都是什么库
  17. 数据挖掘利器 selenium实战案例--论文数据挖掘与可视化分析(上)
  18. ElasticSearch pinyin分词支持多音字
  19. c语言 的意思啊,c语言中!1是什么意思啊
  20. Mathtype和word关联

热门文章

  1. 少儿学编程好还是奥术好
  2. HANDLE是什么意思(怎么用)
  3. Halide学习笔记----Halide tutorial源码阅读2
  4. 小程序/app 商城 源码 发布(包括后台)
  5. switch 语句的参数类型
  6. 【工程应用七】接着折腾模板匹配算法 (Optimization选项 + no_pregeneration模拟 + 3D亚像素插值)...
  7. 智能门锁触控中应用的电容式触摸芯片
  8. vscode - 史上最优秀的 IDE ?
  9. 详解数据模型设计方法
  10. 【机器学习】生成式模型和判别式模型