1. 视图
- Hive中的视图是一种虚拟表,只保存定义,不实际存储数据。
- 通常从真实的物理表查询中创建生成视图,也可以从已经存在的视图上创建新视图。
- 创建视图时,将冻结视图的架构,如果删除或更改基础表,则视图将失败
- 视图是用来简化操作的,不缓冲记录,也没有提高查询性能
1.2 案例
create view v_usa_covid19 as select count_date,country,state,deaths from t_usa_covid19 limit 5;
create view v_usa_covid19_from_view as select * from v_usa_covid19 limit 2;
show views;
select * from v_usa_covid19;
show create table v_usa_covid19;
drop view v_usa_covid19_from_view;
alter view v_usa_covid19 set tblproperties('comment'='This is a view');
alter view v_usa_covid19 as select country,deaths from t_usa_covid19 limit 2;
1.3 视图的好处
- 将真实表中特定的列提供给用户,保护数据隐私
- 降低查询复杂度,优化查询语句(注意不是提高查询效率)。
2. Hive3.0新特性:Materialized View 物化视图
- 物化视图是一个包括查询结果的数据库对象,可以用于预先计算并保存表连接或聚集等耗时较多的操作结果。在执行查询时,就可以避免进行这些耗时的操作,从而快速的得到结果。
- 使用物化视图的目的就是通过预计算,提高查询性能,需要占用一定的存储空间。
- Hive提供物化视图的查询自动重写机制(基于Apache Calcite实现)。
- Hive提供了物化视图存储选择机制,可以本地存储在Hive,也可以通过用户自定义storage handlers存储在其他系统(如Druid)。
- Hive引进物化视图的目的就是为了优化数据查询访问的效率,相当于从数据预处理的角度优化数据访问。
- Hive从3.0丢弃了index索引的语法支持,推荐使用物化视图和列式存储文件格式来加快查询速度。
2.1 物化视图语法
- 物化视图创建后,select查询执行胡数据自动落地,“自动”也即在query的执行期间,任何用户对该物化视图是不可见的,执行完毕之后物化视图可用。
- 默认情况下,创建好的物化视图可被用于查询优化器optimizer查询重写,在物化视图创建期间可以通过disablerewrite参数设置禁止使用。

2.2 基于物化视图的查询重写
- 物化视图创建后即可用于相关查询的加速,即:用户提交查询query,若改query经过重写后可以命中已经存在的物化视图,则直接通过物化视图查询数据返回结果,以实现查询加速。
- 是否重写查询使用物化视图可以通过全局参数控制默认为
true:hive.materializedview.rewriting=true; - 用户可以选择性的控制指定的物化视图查询重写机制
alter materialied view [db.name.]materialized_view_name enable|disable rewrite;
|