您可以在创建物化视图时指定刷新模式。
权限要求
创建视图需要有数据库或表级别的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;
增量刷新
增量刷新仅支持按需自动刷新。增量刷新请参见物化视图增量刷新(预览版)。