CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW#
CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW — 定义一个新的物化视图
大纲
CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] table_name
[ (column_name [, ...] ) ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) ]
[ TABLESPACE tablespace_name ]
AS query
[ WITH [ NO ] DATA ]
描述
CREATE MATERIALIZED VIEW
定义一个查询的物化视图。
在该命令被发出时,查询会被执行并且被用来填充该视图(除非使用了
WITH NO DATA
),并且后来可能会用
REFRESH MATERIALIZED VIEW
进行刷新。
CREATE MATERIALIZED VIEW
类似于
CREATE TABLE AS
,不过它还会记住被用来初始化该视图的查询,
这样它可以在后来被命令刷新。一个物化视图有很多和表相同的属性,但是不支持
临时物化视图。
参数
IF NOT EXISTS
如果已经存在一个同名的物化视图时不要抛出错误。这种情况下会发出一个 提示。注意这不保证现有的物化视图与即将创建的物化视图相似。
table_name
要创建的物化视图的名称(可以被模式限定)。
column_name
新物化视图中的一个列名。如果没有提供列名,会从查询的输出列名来得到。
USING method
此可选子句指定用于存储新具体化视图内容的表访问方法;该方法需要是
TABLE
类型的访问方法。WITH ( storage_parameter
[=value
] [, … ] )这个子句为新的物化视图指定可选的存储参数,详见 存储参数。所有
CREATE TABLE
支持的参数CREATE MATERIALIZED VIEW
也支持。 详见CREATE TABLE。 除了CREATE TABLE
支持的存储参数,物化视图还支持其他参数用以支持物化视图自动调度和查询重写,详见可选参数。TABLESPACE tablespace_name
tablespace_name
是 要把新物化视图创建在其中的表空间的名称。如果没有指定, 将查阅default_tablespace。query
一个SELECT、TABLE 或者VALUES命令。这个查询将在一个安全受限的操作中运行。 特别地,对本身会创建临时表的函数的调用将会失败。
WITH [ NO ] DATA
这个子句指定物化视图是否在创建时被填充。如果不是,该物化视图将被标记为 不可扫描并且在
REFRESH MATERIALIZED VIEW
被使用前不能被查询。
兼容性
CREATE MATERIALIZED VIEW
是一种 OushuDB 扩展。
可选参数
optionalparams [ = value]
物化视图的可选参数主要是为了物化视图的自动刷新和查询重写而指定,这些参数包括:
REFRESH_METHOD = {AUTO/INCREMENTAL/FULL}
功能:指定物化视图的刷新方法。
可选值:
AUTO
:自动选择刷新模式。INCREMENTAL
:增量刷新(当前版本暂不支持)。FULL
:全量刷新。默认值:
AUTO
REFRESH_TIME = {FOLLOW_SCHEDULE/ON_COMMIT}
功能:指定物化视图的刷新时机。
可选值:
FOLLOW_SCHEDULE
:按照时间表刷新(当前版本暂不支持)。ON_COMMIT
:在原表执行DML操作时刷新物化视图。默认值:
FOLLOW_SCHEDULE
SCHEDULE_START = 'timestamp/never'
功能:指定第一次刷新的开始时间。
生效条件:
REFRESH_TIME
设置为FOLLOW_SCHEDULE
时生效。可选值:
never
:不会自动刷新。timestamp
:时间戳类型。默认值:
never
SCHEDULE_INTERVAL = 'interval'
功能:指定两次刷新之间的时间间隔。
生效条件:
REFRESH_TIME
设置为FOLLOW_SCHEDULE
时生效。可选值:
never
:不会自动刷新。interval
:时间间隔类型。默认值:
never
ENABLE_REWRITE = {TRUE/FALSE}
功能:表明物化视图是否加入透明查询重写加速。
可选值:
TRUE
:启用查询重写。FALSE
:禁用查询重写。默认值:
TRUE
目前支持物化视图按照时间表更新,需要以下配置:
将
REFRESH_TIME
设置为FOLLOW_SCHEDULE
。指定第一次刷新开始时间
SCHEDULE_START
。设置刷新周期
SCHEDULE_INTERVAL
。
以下为一个配置示例:
CREATE MATERIALIZED VIEW example_view
WITH (
REFRESH_METHOD = 'FULL',
REFRESH_TIME = 'FOLLOW_SCHEDULE',
SCHEDULE_START = '2024-01-01 00:00:00',
SCHEDULE_INTERVAL = '1 day',
) AS
SELECT * FROM example_table;
该示例配置了全量刷新,并使用时间表进行自动刷新:
第一次刷新开始时间为
2024-01-01 00:00:00
。刷新周期为每天一次。
使用资源队列
high_priority
处理刷新任务。
备注
注意
SCHEDULE_INTERVAL不宜选择太小的值,这会物化视图的导致频繁刷新,过多的后台任务会占用太多数据库资源,影响正常的任务。
当前版本暂不支持 INCREMENTAL
刷新和 FOLLOW_SCHEDULE
刷新模式。
配置资源队列时,请确保队列名称正确且具备足够资源。