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

相关推荐
赤土 炙焱8 天前
hiveserver2启动失败,磁盘满了
hive·hadoop
Francek Chen9 天前
【大数据处理与分析】数据仓库Hive:02 数据湖
大数据·数据仓库·hive·hadoop·分布式·数据分析
Waay12 天前
什么是HBase?它和Hive有什么区别?
大数据·数据库·hive·hadoop·hdfs·hbase
fastjson_13 天前
Hive的介绍和使用
数据仓库·hive·hadoop
William Dawson18 天前
【踩坑实录|Hive1\.2\.1数据服务接口5大疑难问题调试与全方位优化方案】
java·hive·spring boot
牛奶咖啡1325 天前
大数据Hadoop运维应用实践——HIVE与Hadoop实现整合_Hive的配置安装与使用
大数据·hive·hive的配置与安装·metastore服务的配置·hiveserver2服务配置·hive的常用sql操作·beeline的使用
向夏威夷 梦断明暄1 个月前
基于Tez引擎的 Hive SQL 性能优化
hive·sql·性能优化
humbinal1 个月前
同时支持 gui & cli 的 parquet 文件查看工具,高性能小清新!
hive·python·rust·spark·开源·github·parquet
吾AI科技1 个月前
基于Tez引擎的 Hive SQL 性能优化
大数据·hive·性能优化·tez
abcy0712131 个月前
hive 执行器原理
hive