hive中explode配合lateral view

hive中explode配合lateral view,第1张

hive中explode配合lateral view

你知道的越多不知道的就越多

小谈:

        最近将SQL进阶这本书看完了,感觉收益颇丰。对我以前的SQL有了很大的改观,虽然短时间内看不出来,但是时间久了就会越发明显。什么关联子查询,not exists之类的。还有SQL编程。现在就一心一意的更新HIVE里面的知识,后续会更新数仓的知识。

Explode初了解:

        在hive中,使用行转列我们通常会用到explode。explode我们俗称它为炸裂

         explode() 接收一个 array 或 map 类型的数据作为输入,然后将 array 或 map 里面的元素按照每行的形式输出。

        下面来看几个例子来熟悉一下explode吧

select explode(array('A','B','C'));

上面个SQL就是将数组array进行炸裂,将一行炸裂成多列

                A,B,C ====> A                                      B                                      C

 

将map炸裂分开


a:1,b:2,c:3 ===> a 1                            b 2                            c 3

lateral view来袭

通常情况下,explode是和lateral view一块使用配合的。

下面通过一个例子讲解lateral view

先看元数据

将userrole字段里面的属性进行炸裂

 

select explode(userrole) from t_4

系统报错,报错内容说,explode要炸裂的必须是数组或者map。我们上面的userrole并不是数组或者map。因此我们要将它转换为数组。

select split(userrole,',') 根据,进行切分 split之后,就会成为数组。

spllt之前 演员,导演,制片人

split之后 [演员,导演,制片人]

因此,我们要想成功炸裂,整合一下

select explode(split(userrole,','))

我们既然已经将userrle这个字段炸开了,那么我们接上username字段

 

从上面的图片中,可以看到,出错。

报错信息:UDTF不支持我们将explode和其它字段放一块进行查找。

因此,我们的重头戏就来了

lateral view救场
select    username,role
from     t_4 LATERAL VIEW
explode(split(userrole,',')) tmpTable as role

 

        可以看到,我们的结果做对了。但是同时注意一点,later view 之后的explode需要我们给他一个别名。如果不给别名 ,我们上面的查询字段里面就会报错

总结:

    一个SQL 里lateral view 你可以多次使用,就会多次做笛卡尔积;UDTF 要配合lateral view 一起使用才可以;典型的行转列

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5705104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存