hive中行转列,列转行
说实话,这个问题困扰了我许久,因为目前目前来说用的不是很多,但是个人觉得还是非常有必要了解一下的,今天就将它一点点剖析明白。
- 行专列,什么是行专列?
行专列举个简单的例子,一个人身上有多个标签,假如说乔丹,曾经效力于’公牛,奇才’,然后身上的标签有’篮球之神,黑人’,这两种标签,本来是一对多关系,如果你想让他变成一对一关系,就可以用行专列
假如本来是:
name team tab
科比 湖人,黄蜂 帅哥,光头,实力派
乔丹 公牛,奇才 篮球之神,黑人
詹姆士 骑士,湖人 小皇帝,实力派,大胡子
然后标签分开后变成
name team tab
科比 湖人 帅哥
科比 湖人 光头
科比 湖人 实力派
科比 黄蜂 帅哥
科比 黄蜂 光头
科比 黄蜂 实力派
乔丹 公牛 篮球之神
乔丹 公牛 黑人
乔丹 奇才 篮球之神
乔丹 奇才 黑人
詹姆士 骑士 小皇帝
詹姆士 骑士 实力派
詹姆士 骑士 大胡子
詹姆士 湖人 小皇帝
詹姆士 湖人 实力派
詹姆士 湖人 大胡子
这就是典型的行专列,行专列主要用到lateral view 配合炸裂函数explode来实现
创建表语句
create table people(
name varchar(30),
team varchar(50),
tab varchar(50)
);
插入数据
insert into people values('科比','湖人,黄蜂','帅哥,光头,实力派'),
('乔丹','公牛,奇才','篮球之神,黑人'),
('詹姆士','骑士,湖人','小皇帝,实力派,大胡子');
使用later view 配合 explode
select name,t_team.a,t_tab.b from lsj.people
lateral view explode(split(team,',')) t_team as a
lateral view explode(split(tab,',')) t_tab as b;
lateral view 其实就是创建一个张虚拟的表,然后你从这张表中拿东西
用法如下:
lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*
版权声明:本文为qq_44769220原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。