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

一个SELECTTABLE 或者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

目前支持物化视图按照时间表更新,需要以下配置:

  1. REFRESH_TIME 设置为 FOLLOW_SCHEDULE

  2. 指定第一次刷新开始时间 SCHEDULE_START

  3. 设置刷新周期 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 刷新模式。

配置资源队列时,请确保队列名称正确且具备足够资源。