Hive函数之lateral view 和 explode的区别和使用


explode

将一行数据转换成列数据,可以用于array和map类型的数据。就是将hive一行中复杂的array或者map结构拆分成多行。

  1. 用于array的语法如下:
select explode(arraycol) as newcol from tablename;
  • explode():函数中的参数传入的是arrary数据类型的列名。

  • newcol():是给转换成的列命名一个新的名字,用于代表转换之后的列名。

  • tablename():原表名。

  1. 用于map的语法如下:
select explode(mapcol) as (keyname,valuename) from tablename;
  • explode():函数中的参数传入的是map数据类型的列名。由于map是kay-value结构的,所以它在转换的时候会转换成两列,一列是kay转换而成的,一列是value转换而成的。
  • keyname:表示key转换成的列名称,用于代表key转换之后的列名。
  • valuename:表示value转换成的列名称,用于代表value转换之后的列名称。
  • 注意:这两个值需要在as之后用括号括起来然后以逗号分隔。

Lateral View

lateral view是Hive中提供给UDTF的结合,它可以解决UDTF不能添加额外的select列的问题。lateral view其实就是用来和想类似explode这种UDTF函数联用的,lateral view会将UDTF生成的结果放到一个虚拟表中,然后这个虚拟表会和输入行进行join来达到连接UDTF外的select字段的目的。

  • 格式一
lateral view udtf(expression) tableAlias as columnAlias (,columnAlias)*
  • lateral view在UDTF前使用,表示连接UDTF所分裂的字段。

  • UDTF(expression):使用的UDTF函数,例如explode()。

  • tableAlias:表示UDTF函数转换的虚拟表的名称。

  • columnAlias:表示虚拟表的虚拟字段名称,如果分裂之后有一个列,则写一个即可;如果分裂之后有多个列,按照列的顺序在括号中声明所有虚拟列名,以逗号隔开。

  • 格式二

from basetable (lateral view)*

在from子句中使用,一般和格式一搭配使用,这个格式只是说明了lateral view的使用位置。from子句后面也可以跟多个lateral view语句,使用空格间隔就可以了。

  • 格式三
from basetable (lateral view outer)*

它比格式二只是多了一个outer,这个outer的作用是在UDTF转换列的时候将其中的空也给展示出来,UDTF默认是忽略输出空的,加上outer之后,会将空也输出,显示为NULL。这个功能是在Hive0.12是开始支持的。

参考:


文章作者: Leon
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Leon !
评论
  目录