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 值。
相关推荐
王小王-12311 天前
基于 Hive 的网易云音乐数据分析及可视化系统
hive·hadoop·数据分析·音乐数据分析·网易云音乐分析·hive音乐分析·hadoop网易云
TPBoreas12 天前
springboot3.5比2.x做了哪儿些提升
数据仓库·hive·hadoop
Nefu_lyh14 天前
【Hive】七、Hive 函数:聚合 / 统计 / 分位数 / 集合 / 高级分组
数据仓库·hive·hadoop
KANGBboy14 天前
hive UDF函数
数据仓库·hive·hadoop
王小王-12316 天前
基于商品评价的评论情感分析与可视化系统
hive·情感分析·商品评价分析·主题分析·商品评论分析
Nefu_lyh16 天前
【Hive】 八、Hive 计算引擎:MapReduce / Tez / Spark 对比与选型
hive·spark·mapreduce
白日与明月17 天前
Hive子查询中的ORDER BY陷阱:为什么排序“消失”了?
数据仓库·hive·hadoop
Nefu_lyh18 天前
【Hive】六、Hive 运算逻辑:数学 / 逻辑 / 条件 / 日期 / 字符串函数
数据仓库·hive·hadoop
AQin101219 天前
【对比向】既生瑜何生亮?不!Hive 和 Doris不一样
数据仓库·hive·hadoop·doris
AQin101219 天前
【对比向】细算“成本”——Hive vs. Doris
大数据·数据库·hive·doris·实时数仓