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