Hive 之collect_list/collect_set(列转行)
Hive笔记之collect_list/collect_set(列转行)
Hive中collect相关的函数有collect_list和collect_set。
它们都是将分组中的某列转为一个数组返回,不同的是collect_list不去重而collect_set去重。
做简单的实验加深理解,创建一张实验用表,存放用户每天点播视频的记录:
create table t_visit_video (username string,video_name string
) partitioned by (day string)
row format delimited fields terminated by ',';
在本地文件系统创建测试数据文件:张三,大唐双龙传
李四,天下无贼
张三,神探狄仁杰
李四,霸王别姬
李四,霸王别姬
王五,机器人总动员
王五,放牛班的春天
王五,盗梦空间
将数据加载到Hive表:
load data local inpath '/root/hive/visit.data' into table t_visit_video partition (day='20180516');
image
按用户分组,取出每个用户每天看过的所有视频的名字:
select username, collect_list(video_name) from t_visit_video group by username ;
但是上面的查询结果有点问题,因为霸王别姬实在太好看了,所以李四这家伙看了两遍,这直接就导致得到的观看过视频列表有重复的,所以应该增加去重,使用collect_set,其与collect_list的区别就是会去重:
select username, collect_set(video_name) from t_visit_video group by username;
image
李四的观看记录中霸王别姬只出现了一次,实现了去重效果。
突破group by限制
还可以利用collect来突破group by的限制,Hive中在group by查询的时候要求出现在select后面的列都必须是出现在group by后面的,即select列必须是作为分组依据的列,但是有的时候我们想根据A进行分组然后随便取出每个分组中的一个B,代入到这个实验中就是按照用户进行分组,然后随便拿出一个他看过的视频名称即可:
select username, collect_list(video_name)[0] from t_visit_video group by username;
image
video_name不是分组列,依然能够取出这列中的数据。
Hive 之collect_list/collect_set(列转行)相关推荐
- Hive常用函数、列转行与行转列、开窗函数、UDF、UDTF
Hive函数.开窗函数.UDF.UDTF 1.系统内置函数 2.常用函数 2.1.关系运算 2.2.数值运算 2.3.条件函数 2.4.日期函数 2.5.字符串函数 2.6.Hive求WordCoun ...
- hive 如何将数组转成字符串_hive详细笔记(八)-Hive之列转行和行转列(附带讲解视频 )...
1 行转列 1.1 函数 CONCAT(string A/col, string B/col-):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1 ...
- Hive SQL中的concat、concat_ws、concat_group列转行,行转列
目录 1.concat函数,concat_ws函数,concat_group函数 CONCAT() 函数 2.CONCAT_WS(SEPARATOR ,collect_set(column)) 等价于 ...
- Hive ,Hsql行转列、列转行实现
HQL中实现行列转换 其实并不用纠结哪个是行转列.哪个是列转行,明白二者之间的需求即可 在Hive sql应用中会遇到"行转列"和"列转行"的场景,下面介绍其基 ...
- Hive(行转列 列转行)
Hive(行转列 列转行) 行转列 行专列常用的几种方式有 collect_list collect_set 举例说明 原数据 sql SELECT concat_ws("|",c ...
- hive 列转行_掌握这个SQL技巧超越80%的人——行转列/列转行
在做特征工程的时候,会经常会碰到一个场景,比如手上有一张用户表user,记录了用户某款产品每一天各个功能的使用次数,存储方式类似key-value键值结构.具体如下: 用户使用行为统计表user 此时 ...
- hive操作(行转列,列转行)
一.行转列 1.相关函数说明 CONCAT(string A/col, string B/col-):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, st ...
- Hive _偏门常用查询函数(二)附带实例(列转行、窗口函数)
接上篇博客: Hive _偏门常用查询函数(一)附带实例 https://blog.csdn.net/qq_41946557/article/details/102904642 列转行 1.函数说明 ...
- Hive之行转列/列转行
1.行转列 场景:在hive表中,一个用户会有多个人群标签,List格式(逗号分隔如要转成List),有时我们需要统计一个人群标签下有少用户,这是就需要使用行转列了 例如,user_crowd_inf ...
最新文章
- jmeter 导入java_8. Jmeter导入jar包
- 将ejs转为html,Node.js Express Web应用框架ejs修改为html
- JS对文本框输入字符的限制
- arcgis字段计算器无法赋值_Arcgis空间连接工具的妙用
- java中有ClockPane类吗_Java程序设计教程 冶金工业出版社第9章
- OracleBulkCopy的批量数据导入
- ubuntu18.04多版本opencv
- printf格式化字符串_Java printf()–将格式化的字符串打印到控制台
- PHP项目汇报ppt模板,免费工作汇报模板(课堂PPT)
- 设置Hi提醒实现机器人盯盘|自动监测股票价格达到条件推送消息通知
- doom3中PDA信息
- 奇偶校验c语言ascii,奇偶校验(parity check)
- 你可能不知道的 Ps 技巧
- python中s和t是两个集合、对s|t描述正确的是_S和T是两个集合,对ST的描述正确的是...
- wechat-0051,微信公众号,第三方登录—扫码绑定
- 「BIND9」- DLZ(Dynamically Loadable Zones) @20210212
- 5G、LPWAN、SDN、NFV、TSN…一文带你看懂物联网“网”的本质
- 数据库——数据库表和表的操作
- android滚动广告图片素材,安卓手机宣传视频制作软件如何在视频底部添加一行滚动的广告语?视频加滚动水印...
- 10 个提升效率的Linux小技巧
热门文章
- xshell 登录kail拒绝了密码 已解决
- [20170623]利用传输表空间恢复数据库2.txt
- 等不到那人,回不到人间——dbGet(四)
- 如何让jquery-easyui的combobox像select那样不可编辑
- php mysql 简单,你想不到的最简单php操作MySQL
- php tp5 model 文件,tp5model的新增
- pytorch自动求导-07
- 修改windows功能要开启哪个服务器,win7更改windows功能提示出现错误并非所有的功能被成功更改怎么办...
- 我运维生涯的第一个Blog
- java 8 Optional解决空指针异常问题