花2分钟理解hive的Lateral View + explode用法

花2分钟理解hive的Lateral View + explode用法

explode为表生成函数:

作用 : 把map集合或数组array展开,其中每个键值对或数组中的每个元素都单独生成一行。
explode(array_or_map)就是内置表生成函数(UDTF),UDTF将为每个输入行生成零个或多个输出行。
拆开array可以这么做 : explode(array)
拆开map 可以这么做 : explode(split(map,’,’))

lateralView:
语法 : LATERAL VIEW udtf(expression) tableAlias AS columnAlias (’,’ columnAlias)*

示例的代码:
select goods_id2 from sales LATERAL VIEW explode(split(goods_id,’,’)) goods as goods_id2;

这里的sales就是basetable,lateral view可以使用basetable中的任意列,lateral view explode(split(goods_id,’,’))goods这个就是虚拟表,相当于在这个表中做select,然后goods_id2就是explode()后的列的列名

如果还不太理解的话有个偏门一点的方法,就是把 lateral view 理解为桥梁,通过它能把左边从sales里面的数据和右边explode展开的数据一一对应连接起来,这样就组成一张新的虚拟表叫做goods[这表名可随便写也可不写],其中explode后的列名叫goods_id2,最后就是按需要对虚拟表进行select啦
注意:如果展开的列数据类型map类型,那么最后在as后面用2个字段去分别接收key列和value列,字段间用逗号隔开即可;
在这里插入图片描述

Lateral View + Outer+ explode同理,Outer关键字可以把不输出的UDTF空结果,输出成NULL,意思就是Lateral View左边的有字段存在,但右边没有对应的键值对或array让explode展开,那么outer就让它右边的explode展开的结果为null, 如果不加outer这一项直接就不会被查询出来了,这样防止了丢失数据

参考链接
https://zhuanlan.zhihu.com/p/115913870
https://blog.csdn.net/bitcarmanlee/article/details/51926530

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值