概念
- 物化視圖(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(...)]
]