hive行列转换

hive行专列:将一行数据中的多个字段连接起来形成一列(array),所以行转列的关键是concat()函数
concat(col1,col2,…) 将多个String类型的字符串连接起来
concat_ws(‘分隔符’,col1,col2…) 特殊类型的concat,以指定分隔符的方式将多个字符串连接起来
collect_set(col) :col只能是基本苏剧类型,它将字段进行去重汇总操作,形成一个array类型的字段
原始数据:
zhao,a
zhao,b
zhao,c
qian,a
qian,d
sun,b
sun,c
sund

结果数据:
zhao a|b|c
qian a|d
sun b|c|d

建表:

caeate table tmp.row_to_col
(name ,string
score ,string) 
row format delimited fields terminated by ',' stored as textfile ;

导入数据:

hdfs dfs -put /row_to_col.txt /user/hive/warehouse/db.tmp/row_to_col 

行转列:
– collect_set类似聚合函数,其他字段要group by

select
name ,
concat_ws('|',collect_set(score)) as scores 
from tmp.row_to_col 
group by name 

hive 列传行 : 对一列数据(array map)进行拆分,所以会用到拆分函数explode
explode(col) : 对hive中的复杂数据类型(array map) 进行拆分
lateral view udtf(expression) table_alias column_alias
lateral view : 用于和split explode 等UDTF(一进多出)一起使用 他能够将一列数据拆分成多行数据,在此基础上可以对拆分后的数据进行聚合操作

原始数据 :
zhao|yuwen,shuxue,yingyu
qian|dili,huaxue

结果数据:
zhao yuwen
zhao shuxue
zhao yingyu
qian dili
qian huaxue

建表:

create table tmp.col_to_row
(name string,
subject array<string>)  -- 这里的列是array map这些复杂数据类型
row format delimited fileds terminated by '|'
collection items terminated by ','   -- 指定array类型字段的切割方式
stored as textfile ;

当hive表中涉及到复杂数据类型的时候,建表语句是:
row format delimited fileds terminated by ‘|’ – 列字段分割符 ’|‘
collection items terminated by ‘,’ array map struct 的分割符
map key terminated by ‘:’ map的key和value的分隔符
lines terminated by ‘\n’ 行分割符

列转行:

select 
name ,
subjects 
from tmp.col_to_row 
lateral view explode(subject) tmp as subjects ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值