hive一行数据中一列拆分成多行

本文转载自:http://blog.csdn.net/winnerspring/article/details/44677505


lateral view用于和split、explode等UDTF一起使用的,能将一行数据拆分成多行数据,在此基础上可以对拆分的数据进行聚合,lateral view首先为原始表的每行调用UDTF,UDTF会把一行拆分成一行或者多行,lateral view在把结果组合,产生一个支持别名表的虚拟表。

单个LATERAL VIEW:

源表(table1)数据{A:string B:array C:string}

A B C

190 [1030,1031,1032,1033,1190] select id
191 [1030,1031,1032,1033,1190] select id

希望的结果是:

190 1030 select id

190 1031 select id

190 1032 select id

190 1033 select id

190 1190 select id

191 1030 select id

191 1031 select id

191 1032 select id

191 1033 select id

191 1190 select id

故使用select A,B,C from table_1 LATERAL VIEW explode(B) table1 as B得到上述结果

多个LATERAL VIEW的介绍:

LATERAL VIEW clauses are applied in the order that they appear. For example with the following base table:

Array col1Array col2
[1, 2][a”, “b”, “c”]
[3, 4][d”, “e”, “f”]

SELECT myCol1, myCol2 FROM baseTable
LATERAL VIEW explode(col1) myTable1 AS myCol1
LATERAL VIEW explode(col2) myTable2 AS myCol2;
结果如下:

int myCol1string myCol2
1“a”
1“b”
1“c”
2“a”
2“b”
2“c”
3“d”
3“e”
3“f”
4“d”
4“e”
4“f”



复杂方式:

select * from tb_split;

20141018 aa|bb 7|9|0|3

20141019 cc|dd 6|1|8|5

使用方式:select datenu,des,type from tb_split

lateral view explode(split(des,”//|”)) tb1 as des

lateral view explode(split(type,”//|”)) tb2 as type

执行过程是先执行from到 as cloumn的列过程,在执行select 和where后边的语句;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值