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()代码实现:

sql 复制代码
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()代码实现:

sql 复制代码
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)

相关推荐
yuanbenshidiaos3 小时前
【数据挖掘】数据仓库
数据仓库·笔记·数据挖掘
不剪发的Tony老师12 小时前
Apache Hop:开源版本的Kettle
数据仓库·etl
知初~17 小时前
出行项目案例
hive·hadoop·redis·sql·mysql·spark·database
专注API从业者2 天前
分布式电商系统中的API网关架构设计
大数据·数据仓库·分布式·架构
我要用代码向我喜欢的女孩表白2 天前
hive迁移补数脚本细粒度 表名-分区唯一键
数据仓库·hive·hadoop
隔壁老登2 天前
查询hive指定数据库下所有表的建表语句并生成数据字典
数据库·hive·hadoop
人类群星闪耀时3 天前
数据湖与数据仓库:初学者的指南
大数据·数据仓库·spark
一张假钞3 天前
MapReduce 读取 Hive ORC ArrayIndexOutOfBoundsException: 1024 异常解决
大数据·hive·mapreduce
python资深爱好者3 天前
Hive中的分区和桶的概念及其作用
数据仓库·hive·hadoop
Beekeeper&&P...4 天前
Spring Security,servlet filter,和白名单之间的关系
hive·spring·servlet