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 值。
相关推荐
Mephisto.java6 小时前
【大数据学习 | Spark-Core】关于distinct算子
大数据·hive·hadoop·redis·spark·hbase
Kika写代码9 小时前
【大数据技术基础】 课程 第8章 数据仓库Hive的安装和使用 大数据基础编程、实验和案例教程(第2版)
大数据·数据仓库·hive
Francek Chen1 天前
【大数据技术基础 | 实验十二】Hive实验:Hive分区
大数据·数据仓库·hive·hadoop·分布式
青云交1 天前
大数据新视界 -- Hive 数据仓库:构建高效数据存储的基石(下)(2/ 30)
大数据·数据仓库·hive·数据安全·数据分区·数据桶·大数据存储
Yz98762 天前
hive的存储格式
大数据·数据库·数据仓库·hive·hadoop·数据库开发
lzhlizihang2 天前
python如何使用spark操作hive
hive·python·spark
武子康2 天前
大数据-230 离线数仓 - ODS层的构建 Hive处理 UDF 与 SerDe 处理 与 当前总结
java·大数据·数据仓库·hive·hadoop·sql·hdfs
武子康2 天前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
JessieZeng aaa2 天前
CSV文件数据导入hive
数据仓库·hive·hadoop
Yz98763 天前
hive复杂数据类型Array & Map & Struct & 炸裂函数explode
大数据·数据库·数据仓库·hive·hadoop·数据库开发·big data