物化视图作为Hive3.x的新特性,可以将查询的结果保存到一张表上,供客户端之后如果查询同样的数据时,就可以直接返回结果,而不用再执行MR程序,效率极高。
但在使用物化视图时需要注意几点:外部表不能用来创建物化视图、必须是事务表才能用来创建物化视图
drop table if exists student_trans;
create table student_trans (
sno int,
sname string,
sdept string
) clustered by (sno) into 2 buckets stored as orc TBLPROPERTIES ('transactional'='true');
insert overwrite table student_trans select num, name, dept from student;
--对student_trans建立聚合物化视图
create MATERIALIZED VIEW student_trans_agg
as select sdept, count(*) as sdept_cnt from student_trans group by sdept;
这里有个很奇怪的现象,如果在建立物化视图的select语句加上where,就会发现物化视图并不会自动重写query?
show materialized views;
--验证禁用物化视图自动重写
alter materialized view student_trans_agg disable rewrite;
--开启物化视图自动重写
alter materialized view student_trans_agg enable rewrite;
drop materialized view student_trans_agg;
|