explode
和 lateral view
是 Apache Hive 中常用的两个概念,它们通常一起使用来处理数组或映射类型的数据。
hive:explode和lateral view函数实现行转列_hive explode行转列 带字段名-CSDN博客
9、hive的explode、Lateral View侧视图、聚合函数、窗口函数、抽样函数使用详解-CSDN博客
explode
函数
explode
是一个内置的表生成函数(UDTF),它用于将数组或映射中的每个元素拆分成独立的行。具体来说,explode
函数会将一个数组或映射转换成多行,每行包含一个元素。
示例表结构
假设有一个表 src
,其中有一列 array_column
存储着数组类型的数据:
create table src (
id int,
array_column array<string>
);
插入一些示例数据
insert into src values (1, array('apple', 'banana')), (2, array('orange'));
使用 explode
函数
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
一起使用,以实现数组或映射的拆分。它的语法如下:
select ...
from table
lateral view udtf_function(column) alias as column1, column2, ...
table
:原始表。udtf_function(column)
:UDTF 函数及其参数。alias
:UDTF 函数生成的临时表的别名。column1, column2, ...
:UDTF 函数生成的列的名称。
示例
继续上面的例子,我们使用 lateral view
和 explode
来拆分数组:
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
是空数组:
insert into src values (3, array());
如果不使用 outer
关键字,查询结果将不会包含 id
为 3 的行:
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
关键字:
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 值。