全量刷新物化視圖
您可以在創建物化視圖時指定刷新模式。
權限要求
創建視圖需要有數據庫或表級別的CREATE權限。
刷新物化視圖需要有數據庫或表級別的INSERT權限。
需要有物化視圖所涉及的所有表的相關列(或整個表)的SELECT權限。
如果在創建物化視圖時指定物化視圖為自動刷新模式,需要具備通過服務器本地(即
127.0.0.1
)或者任意IP(即'%'
)刷新視圖的權限。
使用建議
若集群規格較小,盡量避免在同一時刻刷新集群內的所有物化視圖,以免影響集群穩定性。
創建物化視圖時指定刷新模式
CREATE [OR REPLACE] MATERIALIZED VIEW <mv_name>
[MV DEFINITION]
[REFRESH [COMPLETE|FAST] [ON [DEMAND |OVERWRITE] [START WITH date] [NEXT date]]]
[QUERY REWRITE]
AS
<QUERY BODY>;
物化視圖刷新模式分為全量刷新(COMPLETE)和增量刷新(FAST)。如果未指定刷新模式,默認為全量刷新。全量刷新會計算刷新時刻的查詢結果,并且用覆蓋的方式替換原來的結果。
說明3.1.9.0及以上版本支持單表增量刷新物化視圖;3.2.0.0及以上版本支持多表增量刷新物化視圖。詳情請參見增量刷新物化視圖(預發)。
查看企業版、基礎版或湖倉版集群的內核版本,請執行
SELECT adb_version();
。如需升級內核版本,請聯系技術支持。查看和升級數倉版集群的內核版本,請參見查看和升級版本。
物化視圖刷新觸發機制分為按需刷新(ON DEMAND)和基表被INSERT OVERWRITE覆寫后自動刷新(ON OVERWRITE)。如果未指定觸發方式,默認為按需刷新。
全量刷新
全量刷新既支持手動刷新,也支持自動刷新。
適用場景
全量刷新適用于T+1類的離線場景。常見的適用場景如下:
數據每天批量更新一次,或者小時級別更新一次,更適合全量刷新。這類SQL通常比較復雜,全量刷新對SQL語法沒有任何約束。
在某些分鐘級別延遲的場景中也可以使用全量刷新,往往這類SQL即使全量計算成本也不大,通常十幾秒能完成,還可以達到一定的實時效果。
示例
手動刷新。示例如下:
CREATE MATERIALIZED VIEW my_mv1 REFRESH COMPLETE AS SELECT * FROM base;
REFRESH MATERIALIZED VIEW my_mv;
按需自動刷新。每天凌晨2點刷新,示例如下:
CREATE MATERIALIZED VIEW my_mv2 REFRESH COMPLETE ON DEMAND START WITH DATE_FORMAT(now() + interval 1 day, '%Y-%m-%d 02:00:00') NEXT DATE_FORMAT(now() + interval 1 day, '%Y-%m-%d 02:00:00') AS SELECT * FROM base;
說明如果某次刷新所用的時間超過自動刷新指定的時間間隔,會自動跳過超過的時間點,等到下次最近的時間點再刷新。
假設自動刷新設置是在00:05:00, 00:10:00, 00:15:00這3個時間點,間隔5分鐘。如果00:05:00時候開始了某次刷新,一直到00:12:00刷新才結束,那么設置的00:10:00刷新會被跳過,直到00:15:00再開始刷新。
基表被INSERT OVERWRITE覆寫后觸發物化視圖自動刷新。示例如下:
創建物化視圖:
CREATE MATERIALIZED VIEW my_mv3 REFRESH COMPLETE ON OVERWRITE AS SELECT * FROM base;
物化視圖引用的基表在執行
INSERT OVERWRITE
語句導致數據被覆蓋后,會觸發自動刷新。INSERT OVERWRITE base SELECT * FROM t0;
增量刷新
增量刷新僅支持按需自動刷新。增量刷新請參見物化視圖增量刷新(預覽版)。