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(列转行)相关推荐

  1. Hive常用函数、列转行与行转列、开窗函数、UDF、UDTF

    Hive函数.开窗函数.UDF.UDTF 1.系统内置函数 2.常用函数 2.1.关系运算 2.2.数值运算 2.3.条件函数 2.4.日期函数 2.5.字符串函数 2.6.Hive求WordCoun ...

  2. hive 如何将数组转成字符串_hive详细笔记(八)-Hive之列转行和行转列(附带讲解视频 )...

    1 行转列 1.1 函数 CONCAT(string A/col, string B/col-):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1 ...

  3. Hive SQL中的concat、concat_ws、concat_group列转行,行转列

    目录 1.concat函数,concat_ws函数,concat_group函数 CONCAT() 函数 2.CONCAT_WS(SEPARATOR ,collect_set(column)) 等价于 ...

  4. Hive ,Hsql行转列、列转行实现

    HQL中实现行列转换 其实并不用纠结哪个是行转列.哪个是列转行,明白二者之间的需求即可 在Hive sql应用中会遇到"行转列"和"列转行"的场景,下面介绍其基 ...

  5. Hive(行转列 列转行)

    Hive(行转列 列转行) 行转列 行专列常用的几种方式有 collect_list collect_set 举例说明 原数据 sql SELECT concat_ws("|",c ...

  6. hive 列转行_掌握这个SQL技巧超越80%的人——行转列/列转行

    在做特征工程的时候,会经常会碰到一个场景,比如手上有一张用户表user,记录了用户某款产品每一天各个功能的使用次数,存储方式类似key-value键值结构.具体如下: 用户使用行为统计表user 此时 ...

  7. hive操作(行转列,列转行)

    一.行转列 1.相关函数说明 CONCAT(string A/col, string B/col-):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, st ...

  8. Hive _偏门常用查询函数(二)附带实例(列转行、窗口函数)

    接上篇博客: Hive _偏门常用查询函数(一)附带实例 https://blog.csdn.net/qq_41946557/article/details/102904642 列转行 1.函数说明 ...

  9. Hive之行转列/列转行

    1.行转列 场景:在hive表中,一个用户会有多个人群标签,List格式(逗号分隔如要转成List),有时我们需要统计一个人群标签下有少用户,这是就需要使用行转列了 例如,user_crowd_inf ...

最新文章

  1. jmeter 导入java_8. Jmeter导入jar包
  2. 将ejs转为html,Node.js Express Web应用框架ejs修改为html
  3. JS对文本框输入字符的限制
  4. arcgis字段计算器无法赋值_Arcgis空间连接工具的妙用
  5. java中有ClockPane类吗_Java程序设计教程 冶金工业出版社第9章
  6. OracleBulkCopy的批量数据导入
  7. ubuntu18.04多版本opencv
  8. printf格式化字符串_Java printf()–将格式化的字符串打印到控制台
  9. PHP项目汇报ppt模板,免费工作汇报模板(课堂PPT)
  10. 设置Hi提醒实现机器人盯盘|自动监测股票价格达到条件推送消息通知
  11. doom3中PDA信息
  12. 奇偶校验c语言ascii,奇偶校验(parity check)
  13. 你可能不知道的 Ps 技巧
  14. python中s和t是两个集合、对s|t描述正确的是_S和T是两个集合,对ST的描述正确的是...
  15. wechat-0051,微信公众号,第三方登录—扫码绑定
  16. 「BIND9」- DLZ(Dynamically Loadable Zones) @20210212
  17. 5G、LPWAN、SDN、NFV、TSN…一文带你看懂物联网“网”的本质
  18. 数据库——数据库表和表的操作
  19. android滚动广告图片素材,安卓手机宣传视频制作软件如何在视频底部添加一行滚动的广告语?视频加滚动水印...
  20. 10 个提升效率的Linux小技巧

热门文章

  1. xshell 登录kail拒绝了密码 已解决
  2. [20170623]利用传输表空间恢复数据库2.txt
  3. 等不到那人,回不到人间——dbGet(四)
  4. 如何让jquery-easyui的combobox像select那样不可编辑
  5. php mysql 简单,你想不到的最简单php操作MySQL
  6. php tp5 model 文件,tp5model的新增
  7. pytorch自动求导-07
  8. 修改windows功能要开启哪个服务器,win7更改windows功能提示出现错误并非所有的功能被成功更改怎么办...
  9. 我运维生涯的第一个Blog
  10. java 8 Optional解决空指针异常问题