千家信息网

hive怎样实现行转列

发表于:2025-02-09 作者:千家信息网编辑
千家信息网最后更新 2025年02月09日,小编给大家分享一下hive怎样实现行转列,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1。问题hive如何将a b 1,2
千家信息网最后更新 2025年02月09日hive怎样实现行转列

小编给大家分享一下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

)

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怎样实现行转列"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0