hive关于行转列,列转行的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive关于行转列,列转行的使用相关的知识,希望对你有一定的参考价值。

参考技术A 行转列:
定义:就是把形如
id --------- name
1 --------- a
2 --------- a
3 --------- a
4 --------- a
的数据转换为
id ------------- name
1,2,3,4 --------- a
这里把四行的数据变成了由一行显示,这就是行转列。

首先要用到的是collect_set或者collect_list,前者去重,后者不去重,一般配合group使用,能把形如:
id --------- name
1 --------- a
2 --------- a
3 --------- a
4 --------- a
转换为
id --------- name
["1","2","3","4"] --------- a

然后需要用到的是concat_ws函数,这个函数需要传递指定分隔符,以及字符串或者字符串数组。能起到把多个字符串拼接到一起的作用。
形如:
id --------- name
["1","2","3","4"] --------- a
通过concat_ws(',',[1,2,3,4])转换为
id --------- name
1,2,3,4 --------- a

连起来就完成了行转列
一般sql为:

列转行
定义:就是把形如
id ------------- name
1,2,3,4 --------- a
的数据转换为
id --------- name
1 --------- a
2 --------- a
3 --------- a
4 --------- a
这里把一行的数据变成了由四行显示,这就是列转行。

首先要用到split函数,这个行数可以把字符串按照指定的规则切分为字符串数组。
形如:
id --------- name
1,2,3,4 --------- a
通过split('1,2,3,4',',')转换为
id --------- name
["1","2","3","4"] --------- a

然后是explode函数,这个行数可以把数组的每个元素转换为一行。
形如
id
["1","2","3","4"]
通过explode(["1","2","3","4"] )转换为
id
1
2
3
4

最后为了拼接其它字段,还需要用到lateral view把explode获得的行当虚拟表来用。
使用方法为 lateral view explode(split(["1","2","3","4"] , ',')) tmptable as new_id ;
其中new_id元素为转换为行后的字段名。

把以上综合起来就完成了列转行
一般sql为:

以上是关于hive关于行转列,列转行的使用的主要内容,如果未能解决你的问题,请参考以下文章

hive的行转列和列转行

Hive之列转行,行转列

Hive之列转行,行转列

Hive sql 行列转换(行转列,列转行)

hive列转行行转列

Hive 行转列和列转行