spark sql如何把一列拆分为多行:Lateral view explode

背景介绍

比如拿到了每个人吃的食物,并且知道每种食物的卡路里,需要计算每个人的摄入的总卡路里数。怎么计算呢?

表p_food

name

food

Lily apple、milk、rice
Amy meat、water、

表f_calorie

food Calorie
apple 50
milk 100
rice 200
water 0
meat

200

...... ......

 

解决方案

需要把p_food表中的food列表进行拆分,拆分为如下形式:

name Food
Lily apple
Lily milk
Lily rice
Amy meat
Amy

water

...... ......

然后再关联f_calorie表,获得每种食物的calorie。

最后通过group by聚合求的每个人摄取的calorie。

select name
       ,sum(calorie)
from
    (select t1.name
            ,fd
            ,t2.calorie
     from p_food t1 lateral view explode(split(food,'、')) as fd
     left join f_calorie t2 on t1.food = t2.food)

group by name

值得注意的是,lateral view explode只支持hive、spark,不支持impala。

现在想想explode()这个函数还是很形象的,explode有爆炸的意思,在这里是是按照一定的格式(比如split(food,'、')先按照顿号分割,然后铺开为多行)分裂数据。

 

欢迎关注微信公众号“数据分析师手记”

spark sql如何把一列拆分为多行:Lateral view explode_第1张图片

你可能感兴趣的:(hive)