Hive行转列(explode/lateral view)

2020-08-05  本文已影响0人  喵星人ZC

explode称之为Hive爆炸函数,意思就是将一行数据炸开。
Usage:explode(array/map) explode函数传递的参数必须是一个array或者是map。

一、具体例子进行实践
现在有一张表有以下字段


image.png

需要将cureses转成列的形式。

SELECT explode(split(courses,'-')) as course FROM safety.dw_hive_course_df 
image.png

二、扩展
上面可以看到表中还有一个用户ID,正常情况下肯定是用户对应课程的。正常的想法是以下的SQL

SELECT id, explode(split(courses,'-')) as course FROM safety.dw_hive_course_df 

但是执行会报错


image.png

通常工作中,explode会结合laderal view使用。因为我们不可能只取explode里面的值,还要取其他的字段。
那么正常SQL应该是下面的

SELECT id,  course
FROM safety.dw_hive_course_df 
 LATERAL VIEW explode(split(courses,'-')) tb_view--虚拟视图名
AS course --虚拟视图中的字段
image.png
上一篇下一篇

猜你喜欢

热点阅读