一、列转行
是指:某一个字段,转成多行显示
table1详情:
col1 string
col2 array<string>
table1数据:
col1 col2
a1 ["a","b"]
列转行处理方式:
select col1,col22
from table1 lateral view explode(col2) tmp_tbl as col22
处理后可得数据:
col1 col22
a1 a
a1 b
语法解释:
EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行
lateral view:
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合
二、行转列
是指:多行数据,转为一个列的数据
table1详情:
col1 string
col2 string
table1数据:
col1 col2
a a1
a a2
a a3
b b1
b b2
行转列处理方式:
select col1,concat_ws(",",collect_set(col2)) as tmp_col2 from table1 group by col1
处理后可得数据:
col1 tmp_col2
a a1,a2,a3
b b1,b2
语法解释:
concat(str1,str2,......):字段或字符串拼接
concat_ws(sep,str1,str2):以分隔符sep,拼接每个字符串
collect_set(col):将某字段的值,去重汇总,产生array类型字段