Hive:explode 和 lateral view

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 存储着数组类型的数据:

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 view 和 explode 来拆分数组:

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 值。
相关推荐
卷毛迷你猪6 小时前
快速实验篇(B12)异常流量与刷单识别(方法论演示)
大数据·hive·hadoop·数据挖掘·聚类
卷毛迷你猪1 天前
快速实验篇(B07 )Session 会话化与序列
大数据·hive·hadoop
卷毛迷你猪1 天前
快速实验篇(B08)搜索词分析实战
大数据·hive·hadoop
卷毛迷你猪1 天前
快速实验篇(B10)品类共现与关联规则实战
大数据·hive·hadoop
卷毛迷你猪1 天前
快速实验篇(B09)城市维度分析,均匀随机字段的识别与证明
大数据·hive·hadoop
卷毛迷你猪2 天前
快速实验篇(B06)页面单跳转化率
大数据·hive·hadoop
卷毛迷你猪3 天前
快速实验篇(B02)DWD 生产级升级
大数据·hive·hadoop
卷毛迷你猪3 天前
快速实验篇(B03) 用户行为漏斗与转化率
大数据·hive·hadoop
卷毛迷你猪3 天前
快速实验篇(B01)用户行为日志画像与 DWD 标准化
大数据·hive·hadoop
卷毛迷你猪3 天前
快速实验篇(B04) 热门品类 Top10 与加权排名
大数据·hive·hadoop