Hive 行转列 列转行
行转列是指多行数据转换为一个列的字段。
列转行是值某一个字段转换成多行显示。
行转列
Hive行转列用到的函数: concat(str1,str2,...) --字段或字符串拼接 concat_ws(sep, str1,str2) --以分隔符拼接每个字符串 collect_set(col) --将某字段的值进行去重汇总,产生array类型字段
a b 1
a b 2
a b 3
c d 4
c d 5
c d 6
变为:
a b 1,2,3
c d 4,5,6
select col1,col2,concat_ws(',',collect_set(col3))
from tmp_bsf_test
group by col1,col2;
列转行 EXPLODE(col):将hive一列中复杂的array或者map结构拆分成多行。 LATERAL VIEW 用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias 解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
a b 1,2,3
c d 4,5,6
变为:
a b 1
a b 2
a b 3
c d 4
c d 5
c d 6
select col1, col2, col5
from tmp_bsf_test a
lateral view explode(split(col3,',')) b AS col5
-- explode就是将hive一行中复杂的array或者map结构拆分成多行。