MaxCompute新推出增量物化視圖功能(Delta Live Materialized View),幫助用戶構建簡單易用的增量更新Pipeline。本文為您介紹MaxCompute增量物化視圖的相關操作。
功能介紹
MaxCompute的增量物化視圖Delta Live MV功能具備以下特點:
聲明式SQL。
增量全量一體化,統一的SQL、存儲和計算。
自動增量刷新,自定義數據新鮮度。
通過級聯增量物化視圖,構建簡單易用的增量更新Pipeline。
增量物化視圖相比全量刷新物化視圖,能夠平衡數據新鮮度和計算代價,充分利用存量的計算結果,通過智能的增量計算算法,減少計算代價,并提高數據新鮮度。
該功能目前處于邀測中,邀測功能使用方法請參見使用說明。
前提條件
已在MaxCompute控制臺創建云棲新功能邀測項目。
源表(source table)已開啟CDC功能。目前支持的源表類型如下:
Delta Table增量表(詳情請參見Delta Table概述),并且需要開啟CDC功能。詳情請參見建表DDL。
增量物化視圖表。增量物化視圖默認已開啟CDC功能。
使用限制
增量物化視圖不能包含非確定性計算,如RAND函數、UDF等。
當前增量物化視圖支持的SQL算子包含:PROJECT、FILTER、AGGREGATE、JOIN。其中:
AGGREGATE當前僅支持以下常見函數:SUM、COUNT、AVG、MIN、MAX。
JOIN當前僅支持維表不發生數據變化的維表JOIN。
創建增量物化視圖
CREATE MATERIALIZED VIEW [IF NOT EXISTS][<project_name>.]<mv_name>
[LIFECYCLE <days>] --指定生命周期
[BUILD DEFERRED] -- 指定是在創建時只生成表結構,不生成數據
[(<col_name> [COMMENT <col_comment>],...)] --列注釋
[DISABLE REWRITE] --指定是否用于改寫
[COMMENT 'table comment'] --表注釋
[PARTITIONED ON/BY (<col_name> [, <col_name>, ...]) --創建物化視圖表為分區表
[REFRESH EVERY xx MINUTES/HOURS/DAYS] -- 設置物化視圖定時更新間隔
[TBLPROPERTIES(
"compressionstrategy"="normal/high/extreme", --指定表數據存儲壓縮策略
"enable_auto_refresh"="true", --指定是否開啟自動刷新
"refresh_mode"="incremental", --指定刷新模式
"only_refresh_max_pt"="true", --針對分區物化視圖,只自動刷新源表最新分區
"refresh_cron"="xx" --根據cron定時器,可以配置定時間隔更新或者定點更新,間隔定點更新等
)]
AS <select_statement>;
增量物化視圖Delta Live MV的語法兼容主要普通物化視圖的語法,目前存在以下差異:
當前不支持將增量物化視圖創建為聚簇表。
增量物化視圖不支持將
enable_auto_substitute
參數設置為true。增量物化視圖是異步物化視圖形態,所使用的base table數據不一定是最新版本,與enable_auto_substitute
設置為true時沖突。
示例:創建一個簡單的增量物化視圖。
CREATE materialized VIEW if NOT EXISTS mv1
refresh EVERY 5 minutes
tblproperties("enable_auto_refresh"="true", "refresh_mode"="incremental")
AS
SELECT name, COUNT(*) FROM source GROUP BY name;
上述SQL語法定義了一個名為mv1的增量物化視圖,每5分鐘自動進行一次增量刷新。其中source為一張開啟CDC功能的Delta Table。
增量刷新模式
相比普通物化視圖,您只需要增加以下屬性參數,即可指定該物化視圖為增量刷新模式或全量刷新模式。
"refresh_mode"="incremental"
目前MaxCompute物化視圖支持如下兩種刷新模式:
full:全量刷新,物化視圖的默認刷新方式。
incremental:增量刷新。內置增量計算能力,只對增量變化的部分進行計算。
自動刷新頻率
增量物化視圖提供以下方式來控制刷新頻率和數據新鮮度:
通過
REFRESH EVERY xx MINUTES/HOURS/DAYS
語法來指定刷新調度間隔,最小值為1分鐘。refresh every 2 minutes
通過在TBLPROPERTIES中指定cron表達式來設置刷新頻率,根據cron定時器,可以配置定時間隔更新、定點更新或間隔定點更新等。其中
refresh_cron
對應的參數是QUARTZ Cron格式的字符串,使用詳情請參見Cron expression examples。TBLPROPERTIES( "enable_auto_refresh"="true", "refresh_cron"="xx" )
通常, 指定刷新周期和打開自動刷新("enable_auto_refresh"="true"
)一起配合使用。
管理和可觀測
刪除增量物化視圖
DROP materialized VIEW [if EXISTS] [<project_name>.]<mv_name>
手動刷新增量物化視圖
增量物化視圖也提供手動刷新能力,語法和普通物化視圖相同:
ALTER materialized VIEW [<project_name>.]<mv_name>
rebuild [PARTITION(<ds>=max_pt(<table_name>),<expression1>...)];
ds:指分區列。
關閉自動刷新
通過修改物化視圖的TBLPROPERTIES參數,可以關閉自動刷新功能。命令如下:
ALTER MATERIALIZED VIEW mv SET TBLPROPERTIES("enable_auto_refresh"="false");
恢復自動刷新
通過修改物化視圖的TBLPROPERTIES參數,可以打開或者恢復自動刷新。
ALTER MATERIALIZED VIEW mv SET TBLPROPERTIES("enable_auto_refresh"="true");
修改刷新頻率
通過以下命令,可以修改增量物化視圖的刷新頻率。
ALTER MATERIALIZED VIEW mv
SET TBLPROPERTIES("enable_auto_refresh"="true", "refresh_interval_minutes"="xx");
refresh_interval_minutes參數最小取值為1,建議該值小于base table的CDC生命周期。
查看增量物化視圖-數據變更歷史
通過以下命令能查看增量物化視圖數據變化的記錄
show history for table incremental_mv;
//查詢結果
ObjectType ObjectId ObjectName VERSION(LSN) Time Operation
TABLE d95ec7015e8b432e8e0092d01da962a9 incremental_mv 0000000000000001 2024-08-18 21:06:32 CREATE
TABLE d95ec7015e8b432e8e0092d01da962a9 incremental_mv 0000000000000002 2024-08-18 21:11:13 UPDATE
計費規則
增量物化視圖包含存儲和計算兩部分費用。與普通物化視圖操作計算存儲計費方式一致。
計算費用
創建或刷新增量物化視圖過程中,涉及到實際啟動作業計算的,會消耗計算資源產生計算費用,其計費規則和普通SQL作業一致。
觸發自動刷新功能時,若無實際增量數據變化,則不會啟動SQL作業進行刷新操作,不產生費用。
建議將增量物化視圖單獨放在某個Project中,方便跟蹤自動刷新的作業及其計算資源消耗和費用。
存儲費用
增量物化視圖和普通物化視圖或者普通表一樣,按照正常存儲計量計費。
增量物化視圖對某些operator可能會采取基于state的增量計算算法,會產生內部state table消耗一定的存儲空間
增量物化視圖需要增量CDC、Time Travel存儲開銷,這部分存儲開銷和普通Delta Table類似。