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使用记录

相关推荐
牛奶咖啡134 天前
大数据Hadoop运维应用实践——HIVE与Hadoop实现整合_Hive的配置安装与使用
大数据·hive·hive的配置与安装·metastore服务的配置·hiveserver2服务配置·hive的常用sql操作·beeline的使用
向夏威夷 梦断明暄6 天前
基于Tez引擎的 Hive SQL 性能优化
hive·sql·性能优化
humbinal13 天前
同时支持 gui & cli 的 parquet 文件查看工具,高性能小清新!
hive·python·rust·spark·开源·github·parquet
吾AI科技15 天前
基于Tez引擎的 Hive SQL 性能优化
大数据·hive·性能优化·tez
abcy07121316 天前
hive 执行器原理
hive
香山上的麻雀100818 天前
Hive内部表(MANAGED_TABLE)的“批量删除分区”特性详解
数据仓库·hive·hadoop
jjjava2.020 天前
SpringMVC入门指南:从零掌握核心要点
数据仓库·hive·hadoop
AllData公司负责人21 天前
数据库同步平台|AIIData数据中台实现OceanBase、达梦数据库、OpenGauss、人大金仓、Hive、TDengine 一键接入Doris
大数据·数据库·hive·mysql·oceanbase·tdengine
AllData公司负责人22 天前
数据同步平台|AIIData数据中台实现MySQL、Hive、Kafka 一键接入Doris
大数据·数据库·hive·mysql·kafka·实时同步
李昊哲小课23 天前
Ubuntu26.04-Hadoop3.5.0搭建hive4.2.0
数据仓库·hive·数仓