当前位置: 首页 > article >正文

Hive collect_set()、collect_list()列转行,并对转换后的行值排序

Hive collect_set()、collect_list()列转行,和concat_ws()使用,并对转换后的行值排序

1、需求描述

对列值分组,并按一定顺序排序,最后多行合并一行,合并值左到右逆序排列。

2、考点:

  • sort_array(e: column, asc: boolean)将array中元素排序(自然排序),默认asc为true,即默认排升序
  • collect_set() 和 collect_list()的区别是前者去重,后者不去重

3.1、直接上collect_list()代码实现:

select st_name
      ,concat_ws(",",sort_array(collect_list(class),false)) 
      ,concat_ws(",",sort_array(collect_list(class),true))
      ,concat_ws(",",sort_array(collect_list(class))) 
from
(
  select "jack" as st_name, '3' as class
  union all
  select "jack" as st_name, '1' as class
  union all
  select "jack" as st_name, '2' as class
  union all
  select "jack" as st_name, '3' as class
  union all
  select "jack" as st_name, '5' as class
)tb_mid
group by st_name;

结果如下:

st_name concat_ws(,, sort_array(collect_list(class), false))    concat_ws(,, sort_array(collect_list(class), true))     concat_ws(,, sort_array(collect_list(class), true))
jack    5,3,3,2,1       1,2,3,3,5       1,2,3,3,5
Time taken: 0.16 seconds, Fetched 1 row(s)

3.2、直接上collect_set()代码实现:

select st_name
      ,concat_ws(",",sort_array(collect_set(class),false)) 
      ,concat_ws(",",sort_array(collect_set(class),true))
      ,concat_ws(",",sort_array(collect_set(class))) 
from
(
  select "jack" as st_name, '3' as class
  union all
  select "jack" as st_name, '1' as class
  union all
  select "jack" as st_name, '2' as class
  union all
  select "jack" as st_name, '3' as class
  union all
  select "jack" as st_name, '5' as class
)tb_mid
group by st_name;

结果如下:


st_name concat_ws(,, sort_array(collect_set(class), false))     concat_ws(,, sort_array(collect_set(class), true))      concat_ws(,, sort_array(collect_set(class), true))
jack    5,3,2,1 1,2,3,5 1,2,3,5
Time taken: 0.152 seconds, Fetched 1 row(s)


http://www.kler.cn/a/226546.html

相关文章:

  • 一键转换MOV至MP3:轻松删除原视频,释放存储空间!
  • git diff查看比对两次不同时间点提交的异同
  • 力扣反转两次的数字
  • C语言第十七弹---指针(一)
  • Ansible概述、Ansible环境准备、Ansibleadhoc临时命令语法、命令模块、文件模块、用户模块、综合练习
  • MySQL之DQL正则表达式
  • Linux系统MySQL重置root密码
  • 如何用Docker+jenkins 运行 python 自动化?
  • 计算机网络——链路层(1)
  • C#验证字符串是否包含汉字:用正则表达式 vs 用ASCII码 vs 用汉字的 Unicode 编码
  • 【Springcloud篇】学习笔记二(四至六章):Eureka、Zookeeper、Consul
  • 3、部分图 Partial Plots
  • 【笔记】Android 常用编译模块和输出产物路径
  • MySQL 安装配置 windows
  • MyBatis笔记梳理
  • 项目02《游戏-04-开发》Unity3D
  • 在jetbrains IDEA/Pycharm/Android Studio中安装官方rust插件,开始rust编程
  • 【软件测试】系统测试
  • 再谈Redis三种集群模式:主从模式、哨兵模式和Cluster模式
  • Relation-graph关系图/流程图,VUE项目基础使用