本文介绍如何创建物化视图。
权限要求
-
需要有数据库或表级别的CREATE权限。
-
需要有数据库或表级别的INSERT权限。
-
需要有物化视图所涉及的所有表的相关列(或整个表)的SELECT权限。
-
如果要启用自动刷新功能,需要创建者具备通过服务器本地(即
127.0.0.1
)或者任意IP(即'%'
)刷新视图的权限。
语法
CREATE [OR REPLACE] MATERIALIZED VIEW <mv_name>
[MV DEFINITION]
[REFRESH COMPLETE [ON <DEMAND|OVERWRITE>] [START WITH date] [NEXT date]]
<QUERY BODY>;
关键字说明
关键字 |
说明 |
|
|
定义物化视图中表相关的特性。物化视图使用一张普通的表结构来存储数据,您可以使用该关键字指定物化视图的主键,分区键,索引等。
说明
与创建表的语法一致,创建物化视图时也不支持定义查询中没有输出的列。 |
|
|
|
定义物化视图的刷新模式,当前仅支持
|
|
定义全量刷新模式的触发方式,支持如下取值:
说明
|
|
|
定义自动进行全量刷新物化视图时的首次刷新时间(即
说明
更多关于刷新物化视图的详情,请参见 刷新物化视图 。 |
|
|
定义物化视图的查询主体,其中:
|
使用限制
-
不支持对物化视图执行
INSERT
、DELETE
或UPDATE
操作。 -
不支持删除或重命名物化视图中引用的基表或基表中的列。如需修改基表需要先删除物化视图。
-
默认情况下,一个 AnalyticDB MySQL版 集群支持创建的物化视图上限如下:
-
集群版本低于3.1.4.7:最多支持创建8个物化视图。
-
集群版本等于或高于3.1.4.7:最多支持创建64个物化视图。
说明 如何查看集群内核版本,请参见 如何查看实例版本信息 。如需升级内核版本,请联系技术支持。 -
示例
-
创建物化视图
myview1
,每五分钟刷新一次。CREATE MATERIALIZED VIEW myview1 REFRESH NEXT now() + interval 5 minute SELECT count(*) as cnt FROM base;
-
创建物化视图
myview2
,每周一凌晨2点刷新。CREATE MATERIALIZED VIEW myview2 REFRESH START WITH DATE_FORMAT(now() + interval 7 - weekday(now()) day, '%Y-%m-%d 02:00:00') NEXT DATE_FORMAT(now() + interval 7 - weekday(now()) day, '%Y-%m-%d 02:00:00') SELECT count(*) as cnt FROM base;
-
创建物化视图
myview3
,每天凌晨2点刷新。CREATE MATERIALIZED VIEW myview3 REFRESH 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') SELECT count(*) as cnt FROM base;
-
创建物化视图
myview4
,每个月第一天凌晨2点刷新。CREATE MATERIALIZED VIEW myview4 REFRESH NEXT DATE_FORMAT(last_day(now()) + interval 1 day, '%Y-%m-%d 02:00:00') SELECT count(*) as cnt FROM base;
-
创建物化视图
myview5
,只刷一次。CREATE MATERIALIZED VIEW myview5 REFRESH START WITH now() + interval 1 day SELECT count(*) as cnt FROM base;
-
创建物化视图
myview6
,不自动刷新,完全依靠手动刷新。CREATE MATERIALIZED VIEW myview6 ( PRIMARY KEY (id) ) DISTRIBUTED BY HASH (id) SELECT id, name FROM base;
-
创建物化视图
myview7
,指定列建立索引,默认全部列建立索引。CREATE MATERIALIZED VIEW myview ( INDEX (name), PRIMARY KEY (id) ) DISTRIBUTED BY HASH (id) SELECT id, name, age FROM base;
-
创建物化视图
myview8
,指定分区键和注释。CREATE MATERIALIZED VIEW myview8 ( name varchar(10), value double, KEY INDEX_ID(id) COMMENT 'id', CLUSTERED KEY INDEX(name, value), PRIMARY KEY(id) DISTRIBUTED BY hash(id) PARTITION BY value(date_format(dat, "%Y%m%d")) LIFECYCLE 30 COMMENT 'MATERIALIZED VIEW c' SELECT * FROM base;
使用建议
-
创建物化视图时支持使用普通表定义中所有的参数,如分区键、分布键和冷热数据存储策略等。创建物化视图时建议定义分区键和主键,以提高后续查询性能。关于创建普通表支持的参数说明,请参见 CREATE TABLE 。
-
若集群规格较小,尽量避免在同一时刻刷新集群内的所有物化视图,以免影响集群稳定性。
-
物化视图和普通表一样,默认全列建立索引。为减少存储空间和写入I/O,如果不需要全列建立索引,您可以指定INDEX关键字对特定列建立索引。在物化视图中建索引的方式与普通表的语法一致,建索引的语句,请参见 CREATE TABLE 。
相关文档