0


hive 之 UDTF 之 explode 函数 和 lateral view 侧视图(原理)

上次有人说这篇 爆炸函数文章

lateral view explode (split(column,‘exp’)) 爆炸函数-CSDN博客

有点似懂非懂。对于explode函数 和 lateral view 侧视图 为什么要搭配使用?以及 lateral view 侧视图 的原理不理解。今天这篇文章将帮大家回答这个问题。

还是先从explode函数说起:

1,explode函数 的功能介绍

ok,懂了,总结一下就是:explode 函数 是属于表生成函数的一种!!!就是把array数组,map类型的数据,一行变多行!!!

2,explode函数 的使用

一起来试试!!

注意,map是炸开成为2列的哦。

再来一个案例深刻理解它的使用:

4,

emmm,相信大家不仅眼睛会了,手也会了。

3,explode函数单独使用,只展示array的字段

那 explode函数可以直接使用嘛?还是说 和 lateral view 侧视图是一对孪生兄弟,必须固定搭配呢?

ok,发现是可以直接单独使用的!!!!在第二点大家已经知道了。

4,explode函数单独使用,但展示多字段试试

单独使用我们知道了,接下来试试explode 函数 要不要和谁搭配 咱也不知道!!

举个栗子,NBA冠军表及其数据如下:

ok,发现 champion_year 字段是个 array 数组,接下咱们只展示这个字段试试:

结论:发现可以单独把array数据类型的字段炸开。

但是,如果把team_name 和 explode(champion_year) 这两个字段一起展示,

会怎么样呢?

omg,发现报错了。展示一个array的字段没问题,但是再多展示一个字段,就会报错。

不应该啊,没道理啊。

怎么办?可能是我对explode 以及 UDTF 理解的不够透彻!!

ok,好像明白了,team_name 字段 是属于 the_nba_championship 这个表 ,

explode 是属于 另外一张虚拟的表,展示字段是来源两个表,

但是仔细看,我们的sql语句,只查询了 the_nba_championship 一张表!!

难怪,会报错!!!

5,explode函数 和 lateral view 侧视图

lateral view 侧视图 应用而生,和 explode 函数 搭配使用!!!

ok,我又懂了,好家伙,开发团队又给咱专门开发了 lateral view 侧视图,结合explode一块使用。

说白了,其底层逻辑就是那张NBA团队冠军年份表 和 explode之后虚拟的表 join 了一下呗。

但虚拟表叫什么,她的字段又叫啥?这个时候 lateral view 侧视图 就呼之欲出了呗。

看到没有,查了两个表的字段数据,还能进行order by 排序,太香了简直。

这下会用了吧。

6, lateral view 侧视图 的语法

select a.team_name , b.year

from the nba_championship a

lateral view explode(champion_year) b as year

上图 b as year 啥意思:

**b **是对 侧视图 虚拟表(**lateral view explode(champion_year) **) 起的别名,可随意取!!!

**year **是对虚拟表 炸开的字段 起的别名,可随意取!!!

这里埋个伏笔,不知道大家发现了没,一开始说 explode 可以炸开的数据类型有两种,一是array数组,二是 map 数据类型。这里只炸开的是array 数组,那如果是炸开的是map ,lateral view 的语法又该怎么写呢。emmmmm,下次安排,下次一定!!!

7,lateral view 的原理

lateral view 的原理,再次回味一下。

ok,现在我希望你可以吊打这个行业95%的sql-boy或sql-girl了。

如果喜欢,欢迎一键三连。

也欢迎提出意见和建议,下次想看什么,可以留言!!!


本文转载自: https://blog.csdn.net/wowulita123/article/details/138172254
版权归原作者 不被定义喵 所有, 如有侵权,请联系我们删除。

“hive 之 UDTF 之 explode 函数 和 lateral view 侧视图(原理)”的评论:

还没有评论