一、行轉列的使用
1、問題
hive如何将
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
2、資料
test.txt
a b 1
a b 2
a b 3
c d 4
c d 5
3、答案
1.建表
drop table tmp_jiangzl_test;
create table tmp_jiangzl_test
(
col1 string,
col2 string,
col3 string
)
row format delimited fields terminated by '\t'
stored as textfile;
load data local inpath '/home/jiangzl/shell/test.txt' into table tmp_jiangzl_test;
2.處理
select col1,col2,concat_ws(',',collect_set(col3))
from tmp_jiangzl_test
group by col1,col2;
二、列轉行
2、答案
drop table tmp_jiangzl_test;
create table tmp_jiangzl_test
(
col1 string,
col2 string,
col3 string
)
row format delimited fields terminated by '\t'
stored as textfile;
處理:
select col1, col2, col5
from tmp_jiangzl_test a
lateral view explode(split(col3,',')) b AS col5
hive中的concat,concat_ws,collect_set 用法:
collect_set的作用:collect_set(col)函數隻接受基本資料類型,它的主要作用是将某字段的值進行去重彙總,産生array類型字段。
concat_ws的作用:表示concat with separator,即有分隔符的字元串連接配接,concat_ws(”,collect_set(home_location))表示用空的字元”來連接配接collect_set傳回的array中的每個元素。
concat:可以連接配接一個或者多個字元串,select concat(‘11’,’22’,’33’);//112233