本文介绍如何管理物化视图。
修改物化视图
权限要求
需要有物化视图的ALTER权限。
语法
ALTER MATERIALIZED VIEW <mv_name>
[MV_PROPERTIES=<MV_PROPERTIES>]
[<ENABLE|DISABLE> QUERY REWRITE]
MV_PROPERTIES
:弹性物化视图的属性,仅支持mv_resource_group和mv_refresh_hints参数。详情请参见MV_PROPERTIES。重要ALTER语句中配置的
<MV_PROPERTIES>
属性会整体覆盖创建弹性物化视图时配置的<MV_PROPERTIES>
属性。例如:创建弹性物化视图时同时配置了
mv_resource_group
和mv_refresh_hints
参数,ALTER语句中仅配置mv_resource_group
参数,执行该语句后,mv_resource_group
参数被修改,mv_refresh_hints
参数会被清除。<ENABLE|DISABLE> QUERY REWRITE
:打开或关闭查询智能改写功能。
示例
打开物化视图
myview1
的查询智能改写功能。ALTER MATERIALIZED VIEW myview1 ENABLE QUERY REWRITE;
修改弹性物化视图
myview9
所使用的资源组。ALTER MATERIALIZED VIEW myview9 MV_PROPERTIES='{ "mv_resource_group":"my_job_rg_2", "mv_refresh_hints":{"query_priority":"HIGH"} }'
查看物化视图定义
查看创建物化视图的DDL语句。
权限要求
需要有物化视图的SELECT权限。
语法
SHOW CREATE MATERIALIZED VIEW <mv_name>
示例
查看创建物化视图myview2
的DDL语句。
SHOW CREATE MATERIALIZED VIEW myview2;
查看物化视图
查看当前数据库中所有具有SELECT权限的物化视图列表。如果有指定Pattern,则返回匹配该Pattern的所有物化视图。
权限要求
需要有物化视图的SELECT权限。
语法
SHOW MATERIALIZED VIEWS [LIKE 'pattern']
示例
查看当前数据库中所有的物化视图。
SHOW MATERIALIZED VIEWS;
删除物化视图
物化视图不能使用DROP TABLE语句删除。
权限要求
需要有物化视图的DROP权限。
语法
DROP MATERIALIZED VIEW <mv_name>
示例
删除物化视图myview4
。
DROP MATERIALIZED VIEW myview4;
物化视图信息表
information_schema.mv_info
所有物化视图的元信息。
常用字段的解释如下表所示:
字段
描述
MV_SCHEMA
物化视图的所在库名。
MV_NAME
物化视图的名称。
MV_DEFINITION
物化视图表属性的DDL。
MV_QUERY
物化视图查询部分的SQL。
FIRST_REFRESH_TIME
如果已配置自动刷新,则表示首次刷新的时间。
NEXT_REFRESH_TIME_FUNC
如果已配置自动刷新,则表示下次刷新的时间推导函数。
OWNER
物化视图的创建者。
如果只需查看单张物化视图定义,建议使用
SHOW CREATE MATERIALIZED VIEW
命令。使用示例如下:
# 统计整个实例有多少张物化视图 SELECT count(*) FROM information_schema.mv_info
information_schema.mv_auto_refresh_jobs
自动刷新任务记录。只有配置了自动刷新功能的物化视图才会出现在这张表里,最多保留1024条记录。
常用字段的解释如下表所示:
字段
描述
MV_SCHEMA
物化视图的所在库名。
MV_NAME
物化视图的名称。
SCHEDULED_START_TIME
计划启动刷新的时间。
START_TIME
实际启动刷新的时间。
END_TIME
刷新结束的时间。
STATE
刷新状态。
PENDING:等待触发刷新。
RUNNING:刷新中,如果很多物化视图同时开始刷新,状态虽然是RUNNING,但是可能在等计算资源。
FINISHED:刷新完成。
FAILED:刷新失败。刷新失败会自动重试,直到重试次数耗尽,那么会跳过这次刷新任务,等待下次刷新。
TIMEOUT:刷新任务进入未知状态,迟迟没有成功。
使用示例如下:
# 查看 mymv 的自动刷新记录 SELECT * FROM information_schema.mv_auto_refresh_jobs where mv_name = 'mymv'