您可以在建立物化視圖時指定重新整理模式。
許可權要求
建立視圖需要有資料庫或表層級的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;
增量重新整理
增量重新整理僅支援按需自動重新整理。增量重新整理請參見物化視圖增量重新整理(預覽版)。