Hive:explode 和 lateral view

explodelateral view 是 Apache Hive 中常用的两个概念,它们通常一起使用来处理数组或映射类型的数据。

hive:explode和lateral view函数实现行转列_hive explode行转列 带字段名-CSDN博客

9、hive的explode、Lateral View侧视图、聚合函数、窗口函数、抽样函数使用详解-CSDN博客

explode 函数

explode 是一个内置的表生成函数(UDTF),它用于将数组或映射中的每个元素拆分成独立的行。具体来说,explode 函数会将一个数组或映射转换成多行,每行包含一个元素。

示例表结构

假设有一个表 src,其中有一列 array_column 存储着数组类型的数据:

sql 复制代码
create table src (
  id int,
  array_column array<string>
);
插入一些示例数据
sql 复制代码
insert into src values (1, array('apple', 'banana')), (2, array('orange'));
使用 explode 函数
sql 复制代码
select id, value
from src
lateral view explode(array_column) exploded_table as value;

在这个查询中:

  • LATERAL VIEW explode(array_column) exploded_table AS value 这部分指定了要对 array_column 列应用 explode 函数,并且将生成的列命名为 value
  • 对于 src 表中的每一行,explode 函数会将 array_column 中的每个元素拆分成独立的行。
查询结果

假设 src 表中的数据如上所述插入,那么上述查询的结果将是:

id value
1 apple
1 banana
2 orange

lateral view explode

lateral view 是一个特殊的语法,用于将 UDTF(如 explode)的结果与原始表中的每一行进行关联 。这意味着,对于原始表中的每一行,UDTF 都会被调用一次,并且其产生的每一行都会与原始行的数据组合起来。

基本用法

lateral view 通常与 explode 一起使用,以实现数组或映射的拆分。它的语法如下:

sql 复制代码
select ...
from table
lateral view udtf_function(column) alias as column1, column2, ...
  • table:原始表。
  • udtf_function(column):UDTF 函数及其参数。
  • alias:UDTF 函数生成的临时表的别名。
  • column1, column2, ...:UDTF 函数生成的列的名称。
示例

继续上面的例子,我们使用 lateral viewexplode 来拆分数组:

sql 复制代码
select id, value
from src
lateral view explode(array_column) exploded_table as value;

lateral view outer explode

有时候,数组或映射可能是空的或包含 NULL 值,这时 explode 函数不会生成任何行,导致原始表中的某些行在结果集中丢失。为了防止这种情况发生,可以使用 lateral view outer 关键字。

示例

假设在 src 表中添加一行,其中 array_column 是空数组:

sql 复制代码
insert into src values (3, array());

如果不使用 outer 关键字,查询结果将不会包含 id 为 3 的行:

sql 复制代码
select id, value
from src
lateral view explode(array_column) exploded_table as value;

结果:

id value
1 apple
1 banana
2 orange

为了确保 id 为 3 的行也出现在结果集中,可以使用 outer 关键字:

sql 复制代码
select id, value
from src
lateral view outer explode(array_column) exploded_table as value;

结果:

id value
1 apple
1 banana
2 orange
3 NULL

总结

  • explode 函数 :用于将数组或映射中的每个元素拆分成独立的行。
  • lateral view 关键字 :用于将 UDTF 的结果与原始表中的每一行进行关联。
  • lateral view outer 关键字:用于确保即使 UDTF 没有生成任何行,原始表中的行也会保留在结果集中,只是 UDTF 生成的列会包含 NULL 值。
相关推荐
工作中的程序员3 天前
hive sql优化基础
hive·sql
风跟我说过她3 天前
Sqoop的安装与配置
hive·hadoop·经验分享·centos·hbase·sqoop
DashingGuy7 天前
hive、spark任务报错或者异常怎么排查以及定位哪段sql
hive·sql·spark
秦JaccLink11 天前
Hive语句执行顺序详解
数据仓库·hive·hadoop
AI算力网络与通信11 天前
大数据领域 Hive 数据仓库搭建实战
大数据·数据仓库·hive·ai
工业互联网专业14 天前
基于大数据hive的银行信用卡用户的数仓系统的设计与实现_django
大数据·hive·django·毕业设计·源码·课程设计·数仓系统
顧棟14 天前
【Hive实战】hive-testbench的调研
数据仓库·hive·hadoop
emmm...14 天前
hive连不上,报错9000拒绝连接
数据仓库·hive·hadoop
野老杂谈14 天前
Hive SQL 中的时间戳转换详解
hive·hadoop·sql
大数据CLUB14 天前
基于hive和mapreduce的地铁数据分析及可视化_hive作为数据库
大数据·hive·hadoop·分布式·数据分析·mapreduce