hive行转列、列转行

一、列转行

是指:某一个字段,转成多行显示

table1详情:

col1                     string

col2             array

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类型字段

你可能感兴趣的:(hive行转列、列转行)