分享

Hive行转列函数collect_set

阿飞 发表于 2020-7-26 17:17:15 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 793


行转列,在传统数据库中还是比较难以实现的,那么在Hive如何实现行转列,通过Hive的collect_set来实现。

更多参考

Hive中列转行函数collect_set详解

--1.创建测试表
create table test1011
(
   c1  string,
   c2  string,
   c3  string
)
row format delimited fields terminated by ' '
stored as textfile;

--2.添加测试文件和数据
test20171011.txt
a b 1
a b 2
a b 3
c d 4
c d 5
c d 6

--3.加载数据
--使用场景: 通过hue文件上传
load data inpath '/user/pabrdm/test20171011.txt' into table pabrdm.test1011;  
--使用场景: linux后台执行         
--load data local inpath '/user/pabrdm/test20171011.txt' into table pabrdm.test1011;  
有local表示从本地文件系统加载(文件会被拷贝到hdfs中)
无local表示从hdfs中加载数据(注意:文件直接被移动,而不是拷贝)
overwrite 表示是否覆盖表中数据(或指定分区的数据)(没有overwrite 会直接append,而不会滤重)

--4.查询
select * from test1011;
select c1,c2,collect_set(c3) as c3
  from test1011
group by c1,c2;

结果如下:
c1 c2 c3
a b ["1","2","3"]
c d ["4","5","6"]

--5.补充字符串连接函数:concat_ws  带分隔符
它是一个特殊形式的concat(),第一个参数为分隔符。
这个函数会跳过分隔符参数后的任何null和空字符串。
分隔符将被加到被连接的字符串之间,如果分隔符是null,返回值也将为null。

select c1,c2,concat_ws(',',collect_set(c3)) as c3
from test1011
group by c1,c2;
c1 c2 c3
a b 1,2,3
c d 4,5,6




没找到任何评论,期待你打破沉寂

关闭

推荐上一条 /2 下一条