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总结

  1. with as类似于一个视图/临时表,我们可以将频繁使用的sql存储下来
  2. 视图的使用也要在with as中
  3. with as可以看作是一个一次性或者封闭型的函数,只能在with as中使用,所以如果有多sql使用的时候,要写在一个with as中

版权声明:本文为weixin_46429290原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。