Hive:posexplode v.s. explode 实现列转行

hive中explode相关的列转行总结

explode

explode 的输入只能是 array 或者map格式,按行输出array或map中的元素,比如:

sql 复制代码
select explode(split('1,2,3',','))

输出

explode(split('1,2,3', ','))
1
2
3
sql 复制代码
-- map explode
select explode(map('A','1','B','2','C','3'))

输出:

key value
A 1
B 2
C 3

posexplode()

在explode的基础上,输出了pos,结合lateral view 细腻表适用于对于多列进行转成多行的情况。

如:

sql 复制代码
select posexplode(split('1,2,3',','))

输出:

pos col
0 1
1 2
2 3

laterval view 虚拟表

结合udtf产出虚拟表:

sql 复制代码
lateralView: LATERAL VIEW udtf(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*

lateral view explode(array)示例

sql 复制代码
select id,tim,single_tim 
from test.a lateral view explode(split(tim,',')) t as single_tim
--输出:
id	tim	single_tim
a,b,c,d	2:00,3:00,4:00,5:00	2:00
a,b,c,d	2:00,3:00,4:00,5:00	3:00
a,b,c,d	2:00,3:00,4:00,5:00	4:00
a,b,c,d	2:00,3:00,4:00,5:00	5:00
f,b,c,d	1:10,2:20,3:30,4:40	1:10
f,b,c,d	1:10,2:20,3:30,4:40	2:20
f,b,c,d	1:10,2:20,3:30,4:40	3:30
f,b,c,d	1:10,2:20,3:30,4:40	4:40
Time taken: 51.289 seconds, Fetched: 8 row(s)

lateral view posexplode(array)示例

sql 复制代码
select id,tim,single_id,single_tim from test.a 
lateral view posexplode(split(id,',')) t as single_id_index, single_id
lateral view posexplode(split(tim,',')) t as single_yim_index, single_tim
where single_id_index = single_yim_index;
-- 输出:
id	tim	single_id	single_tim
a,b,c,d	2:00,3:00,4:00,5:00	a	2:00
a,b,c,d	2:00,3:00,4:00,5:00	b	3:00
a,b,c,d	2:00,3:00,4:00,5:00	c	4:00
a,b,c,d	2:00,3:00,4:00,5:00	d	5:00
f,b,c,d	1:10,2:20,3:30,4:40	f	1:10
f,b,c,d	1:10,2:20,3:30,4:40	b	2:20
f,b,c,d	1:10,2:20,3:30,4:40	c	3:30
f,b,c,d	1:10,2:20,3:30,4:40	d	4:40

注意事项

  1. lateral view [outer] explode(),如果要拆分的字段有null值,需要使用lateral view outer 替代,避免数据缺失,参考文档见:[https://blog.csdn.net/weixin_45857425/article/details/117933039\];(https://blog.csdn.net/weixin_45857425/article/details/117933039)
  2. lateral view的位置是from后where条件前;
  3. 生成的虚拟表的表名不可省略;
  4. from后可带多个lateral view;

参考文档:

重点阅读:Hive--sql中的explode()函数和posexplode()函数
explode和lateral view explode使用记录

相关推荐
十月南城3 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
王九思3 天前
Hive Thrift Server 介绍
数据仓库·hive·hadoop
Asher05093 天前
Hive核心知识:从基础到实战全解析
数据仓库·hive·hadoop
xhaoDream3 天前
Hive3.1.3 配置 Tez 引擎
大数据·hive·tez
一号IT男6 天前
Hive中GROUPING SETS功能详解
数据仓库·hive·hadoop
500佰6 天前
Hive常见故障多案例FAQ宝典 --项目总结(宝典一)
大数据·linux·数据仓库·hive·hadoop·云计算·运维开发
好学且牛逼的马9 天前
从“配置地狱“到“云原生时代“:Spring Boot 1.x到4.x演进全记录与核心知识点详解
hive·spring boot·云原生
Timer_Cooker11 天前
Hive Sum(null)编译报错分析
数据仓库·hive·hadoop
AI_567814 天前
Hive SQL优化:分区表+分桶表提升查询效率
人工智能·hive·ai