Hive语法中with as的使用
一、with as是什么?
如果有一个需求,或者一堆需求,而这一堆需求中频繁的都要使用一个数据集,但是这个数据集在原始数据集中没有,可以通过一些操作在原始数据集中得到,那么该怎么办?
这个时候最基础的想法,写一个程序,把频繁使用到的中间数据得到,然后从中间数据中进行处理分析,这个思维方式其实就是with as语法的使用逻辑。
如果对于一个逻辑的处理,大量的需求都使用到了一个中间数据,我们就可以使用with as将中间数据先计算存储下来,以后的操作如果用到这个中间数据,就避免了重复的计算,这个思维也有点类似于数仓分层的一个小特点,简化不必要的重复计算。
这个中间数据又叫做视图。
二、with as怎么用?
那么with as怎么使用?
语法:
with tmp_tn1 as (
select ... from .... where .... group ... ... ...
),
tmp_tn2 as (
select ... from ... where ... group ... ...
),
tmp_tn3 as ()
一个with as 可以包含多个视图,中间用逗号隔开
视图存储了,怎么使用
with tmp_tn1 as (
select ... from .... where .... group ... ... ...
),
tmp_tn2 as (
select ... from ... where ... group ... ...
)
select * from tmp_tn1,tmp_tn2;
注意:视图建立和视图使用要写在一个with as中,而且在最后的with as视图中不用使用逗号
三、with as测试
比如有一个score的表,里面有三个字段名字、学科、成绩
现在使用with as,分别建立名字为孙悟空的名字,以及名字为孙悟空的成绩
说明:这里只是用于举例with as的使用,真是生产环境中大概率不会这么写
with nam as (
select name,subject
from score
where name='孙悟空'
),
sco as (
select name,score
from score
where name='孙悟空'
)
select * from nam,sco
四、with as总结
- with as类似于一个视图/临时表,我们可以将频繁使用的sql存储下来
- 视图的使用也要在with as中
- with as可以看作是一个一次性或者封闭型的函数,只能在with as中使用,所以如果有多sql使用的时候,要写在一个with as中