Apache Hive With

2022-04-11 00:00:00 查询 子句 引用 定义 逗号
原文链接:https://mp.weixin.qq.com/s/GxZPVDsv6Cd-RrMgJ49ZGg

Apache Hive With

(数据查询到内存)



Apache Hive With


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

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

With案例

EG1:
with q1 asselect key from a2data.test where key = ‘666’)
select * 
from
q1;


--from style

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

-- chaining CTEs

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


-- union example

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

--insert example
create table  tb1 like a2data.test;
with q1 as (select keyvalue from a2data.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 查询的结果列有别名,引用的时候必须使用别名或*。

相关文章