概念
- 物化视图(Materialized View)是一个包括查询结果的数据库对象,可以用于预先计算并保存表连接或聚集等耗时较多的操作的结果。在执行查询时,就可以避免进行这些耗时的操作,而从快速的得到结果。
- 使用物化视图的目的就是通过预计算,提高查询性能,当然需要占用一定的存储空间。
- Hive3.0开始尝试引入物化视图,并提供对于物化视图的查询自动重写机制(基于Apache Calcite实现)。
- Hive的物化视图还提供了物化视图存储选择机制,可以本地存储在Hive,也可以通过用户自定义storage handlers存储在其他系统(如Druid)。
- Hive引入了物化视图的目的就是为了优化数据查询访问效率,相当于从数据预处理的角度优化数据访问。
- Hive从3.0丢弃了index索引的语法支持,推荐使用物化视图和列存储文件格式加快查询的速度。
物化视图、视图区别
- 视图是虚拟的,逻辑存在的,只有定义没有存储数据。
-
物化视图是真实的,物理存在的,里面存储着预计算的数据。
物化视图能够缓存数据,在创建物化视图的时候就能把数据缓存起来了,Hive把物化视图当成一张“表”,将数据缓存。而视图只是创建一张虚拟表,只有表结构,没有数据,实际查询的时候再去改写sql去访问实际的数据表。
- 视图的目的就是简化降低查询的复杂度,而物化视图的目的是提高查询性能。
语法
- 物化视图创建后,select查询执行数据自动落地,“自动” 也即在query的执行期间,任何用户对该物化视图是不可见的,执行完毕之后物化视图可用;
- 默认情况下,创建好的物化视图可被用于查询优化器optimizer查询重写,在物化视图创建期间可以通过DISABLE REWRITE 参数设置禁止使用。
-- 物化视图的创建语法
create materialized view [if not exists] [db_name.]materialized_view_name
[disable rewrite]
[comment materialized_view_comment]
[partition on(col_name,...)]
[clustered on(col_name,...) | distributed on(col_name,...) sorted on(col_name,...)]
[
[row format row_format]
[stored as file_format]
| stored by 'storage.handler.class.name'[with serdeproperties(...)]
]