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 值。
相关推荐
weixin_3077791310 小时前
使用C#实现从Hive的CREATE TABLE语句中提取分区字段名和数据类型
开发语言·数据仓库·hive·c#
一个天蝎座 白勺 程序猿12 小时前
大数据(4.6)Hive执行引擎选型终极指南:MapReduce/Tez/Spark性能实测×万亿级数据资源配置公式
大数据·hive·mapreduce
一个天蝎座 白勺 程序猿1 天前
大数据(4.5)Hive聚合函数深度解析:从基础统计到多维聚合的12个生产级技巧
大数据·hive·hadoop
weixin_307779131 天前
C#实现HiveQL建表语句中特殊数据类型的包裹
开发语言·数据仓库·hive·c#
一个天蝎座 白勺 程序猿2 天前
大数据(4.2)Hive核心操作实战指南:表创建、数据加载与分区/分桶设计深度解析
大数据·hive·hadoop
一个天蝎座 白勺 程序猿2 天前
大数据(4.3)Hive基础查询完全指南:从SELECT到复杂查询的10大核心技巧
数据仓库·hive·hadoop
weixin_307779132 天前
判断HiveQL语句为建表语句的识别函数
开发语言·数据仓库·hive·c#
酷爱码2 天前
hive相关面试题以及答案
hive·分布式
珹洺3 天前
Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)
java·开发语言·前端·hive·hadoop·servlet·html
shouwangV63 天前
hive执行CTAS报错“Hive Runtime Error while processing row”
数据仓库·hive·hadoop