当前位置:   article > 正文

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

lateral view explode函数

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

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 啥意思:

 是对 侧视图 虚拟表(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了。

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/817163
推荐阅读
相关标签
  

闽ICP备14008679号