Apache Hive With

hive 可以通过with 查询来提高查询性能,

因为先通过with语法可以将数据查询到内存,
然后后面查询可以直接使用。

  • With
EG1:
with q1 asselect key from test where key =666’)
select * 
from
q1;


--from style

with q1 as (select * from test where key = '666')
from q1
select *;

-- chaining CTEs

with q1 as (select key from q2 where key = '666')
q2 as (select key from test where key ='666')
select * from (select key from q1) a;


-- union example

with q1 as (select * from test where key = '666'),
q2 as (select * from test s2 where  key = '6')
select * from q1 union all select * from q2;

--insert example
create table  tb1 like test;
with q1 as (select key, value from test where key = '666')
from q1
insert overwrite table tb1;
  • 总结
  1. 使用with 子句 可以让子查询重用相同的 with 查询块,

通过select调用(with 子句只能被select 查询块引用),

一般情况,with 查询用到多次情况下,在引用select语句之前定义,同级只能定义with关键字只能使用一次,多个用逗号分割。

2)with 子句的返回结果存到用户的临时表空间中,只做一次查询,反复使用来提高效率。3)在同级select 前有多个查询定义的时候,第一个用with ,后面的不用with,并且用逗号(,)隔开。

4)最后一个with 子句 与下面的查询之间不能有逗号, 只能通过右括号分割,

with子句的查询必须用括号括起来。

5)如果定义了with子句,而在查询中不使用,那么会报错:

ora-320035的错误,未引用with子句中定义的查询名。

(至少一个with查询的name 未被引用,解决方案是移除未被引用的with 查询),

注意: 只要后边有引用的就可以,不一定非要在住查询中引用,比如后边的with查询中引用了,也是可以的。

6)前面的with子句定义的查询在后面的with子句中可以使用。

但是一个with子句内部不能 嵌套with 子句。

7)当一个查询块名字和一个表名或其他的对象相同时,解析器从内向外搜索,优先使用子查询块名字。

8)with 查询的结果列有别名,引用的时候必须使用别名或*。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值