hive一行变多行
hive一行变多行
张欢19933 发表于4个月前
hive一行变多行
  • 发表于 4个月前
  • 阅读 22
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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

单个LATERAL VIEW:

源表(table1)数据{A:string B:array<BIGINT> 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<int> col1

Array<string> 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 myCol1

string 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后边的语句;

标签: hive lateral
共有 人打赏支持
粉丝 29
博文 375
码字总数 194741
×
张欢19933
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: