您好,登錄后才能下訂單哦!
小編給大家分享一下hive怎樣實現行轉列,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
1。問題
hive如何將
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
答案如下:
2。原始數據:
test.txt
a b 1,2,3
c d 4,5,6
3。解決方法
方案1:
drop table test_jzl_20140701_test;
create table test_jzl_20140701_test
(
col1 string,
col2 string,
col3 string
)
row format delimited fields terminated by ' '
stored as textfile;
load data local inpath '/home/jiangzl/shell/test.txt' into table test_jzl_20140701_test;
select * from test_jzl_20140701_test
a b 1,2,3
c d 4,5,6
遍歷數組中的每一列
select col1,col2,name
from test_jzl_20140701_test
lateral view explode(split(col3,',')) col3 as name;
a b 1
a b 2
a b 3
c d 4
c d 5
c d 6
方案2:
drop table test_jzl_20140701_test1;
create table test_jzl_20140701_test1
(
col1 string,
col2 string,
col3 array<int>
)
row format delimited
fields terminated by ' '
collection items terminated by ',' //定義數組的分隔符
stored as textfile;
load data local inpath '/home/jiangzl/shell/test.txt' into table test_jzl_20140701_test1;
select * from test_jzl_20140701_test1;
a b [1,2,3]
c d [4,5,6]
遍歷數組中的每一列
select col1,col2,name
from test_jzl_20140701_test1
lateral view explode(col3) col3 as name;
a b 1
a b 2
a b 3
c d 4
c d 5
c d 6
4。補充知識點:
select * from test_jzl_20140701_test;
a b 1,2,3
c d 4,5,6
select t.list[0],t.list[1],t.list[2] from (
select (split(col3,',')) list from test_jzl_20140701_test)t;
OK
1 2 3
4 5 6
--查看數組長度
select size(split(col3,',')) list from test_jzl_20140701_test;
3
3
以上是“hive怎樣實現行轉列”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。