跳到主要内容

CREATE MATERIALIZED VIEW LOG

描述

该语句用来创建物化视图日志。

物化视图日志(Materialized View Log,mlog)用于记录基表(普通表或物化视图)的增量更新数据,以支持物化视图的快速刷新功能。mlog 是一个记录表,追踪基表的变化,并将这些变化应用于相应的物化视图,实现快速刷新。

信息

seekdb mlog 暂时不支持指定 Partition,mlog 的 Partition 和基表的 Partition 是绑定关系。

权限要求

创建物化视图日志需要有 CREATE TABLE 和基表的 SELECT 权限。有关 seekdb 权限的详细介绍,参见 seekdb 的权限分类

语法

CREATE [OR REPLACE] MATERIALIZED VIEW LOG ON [database.] table
[parallel_clause]
[with_clause]
[mv_log_purge_clause];

parallel_clause:
NOPARALLEL
| PARALLEL integer

with_clause:
WITH [ {PRIMARY KEY | ROWID | SEQUENCE}
[ { , PRIMARY KEY | , ROWID | , SEQUENCE }]... ]
(column_name [, column_name]...)
[new_values_clause]

new_values_clause:
{INCLUDING | EXCLUDING} NEW VALUES

mv_log_purge_clause:
PURGE {IMMEDIATE [ SYNCHRONOUS ]
| START WITH datetime_expr [NEXT datetime_expr]
| [START WITH datetime_expr] NEXT datetime_expr
}

参数说明

参数描述
OR REPLACE可选项,指定 OR REPLACE 表示如果对应的 mlog 已经存在,则根据定义创建一个新的 mlog,用新的 mlog 替换原有的 mlog。重新创建 mlog 过程中不会影响物化视图和基表的正常读写。
database.可选项,指定物化视图日志基表所在的数据库。如果省略 database.,则默认基表在您自己的数据库中。
table指定物化视图日志对应的基表名称。
parallel_clause可选项,指定创建物化视图表的 dop,即用于指定并行处理物化视图日志的级别。详细介绍可参见下文 parallel_clause
with_clause可选项,指定物化视图日志中包含的辅助列。用于指示是否记录基表发生变化时的主键(PRIMARY KEY)和行标识符(ROWID),并且还可以使用该子句添加序列(SEQUENCE)来为物化视图日志提供额外的排序信息。详细介绍可参见下文 with_clause
column_name可选项,指定要在所有已更改行的物化视图日志中记录其值的列名称。
new_values_clause可选项,是否在物化视图日志中同时记录更新操作中的旧值和新值。详细介绍可参见下文 new_values_clause
mv_log_purge_clause可选项,指定物化视图日志中数据的清除时间。详细介绍可参见下文 mv_log_purge_clause

parallel_clause

  • NOPARALLEL:默认配置,并行度为 1

  • PARALLEL integer:指定并行度,integer 取值大于等于 1

with_clause

  • PRIMARY KEY:表示物化视图日志记录的是基表的主键列。对有主键表才生效,如果不指定,系统会自动为物化视图日志添加这个属性,即物化视图日志默认会包含主键列。

  • ROWID:表示物化视图日志记录的是基表的行标识符(ROWID)。如果不指定,系统会自动为物化视图日志添加这个属性,即物化视图日志默认会包含 M_ROW$$ 列。

  • SEQUENCE:表示物化视图日志记录的是事务内的多行更新序号(seq_no)。系统会自动为物化视图日志添加这个属性,即物化视图日志会默认包含 SEQUENCE$$ 列。

new_values_clause

  • INCLUDING:默认设置,表示可以在物化视图日志中保存新旧值。如果希望物化视图支持快速刷新,则必须指定 INCLUDING NEW VALUES

  • EXCLUDING:表示禁用在物化视图日志中记录新值。请不要使用 EXCLUDING NEW VALUES,否则将会报错。

mv_log_purge_clause

提示

只有在物化视图成功刷新后,物化视图日志中的相应数据才会被清除。

  • IMMEDIATE:表示在每次刷新完物化视图后就立即清除相应的物化视图日志。默认值是 SYNCHRONOUS

    • SYNCHRONOUS:可选项,表示同步地执行清除。
  • START WITH datetime_expr [NEXT datetime_expr]

    • START WITH datetime_expr:表示物化视图日志的首次清除时间。
    • [NEXT datetime_expr]:可选项,表示下一次清除物化视图日志的时间。用于设置下一次清除物化视图日志的时间。
  • [START WITH datetime_expr] NEXT datetime_expr:如果未指定 START WITH datetime_expr 参数,仅指定 NEXT datetime_expr 参数,那么物化视图日志的第一次清除时间将设定为 NEXT datetime_expr 参数的值。

提示

请确保 START WITH datetime_exprNEXT datetime_expr 这两个时间表达式设定在未来的时间点,否则会引发错误。

建议使用 sysdate() 表示当前时区时间,时间表达式示例如下:

START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY

上述子句表示从当前时间(sysdate())开始,每隔 1 天清理一次过期的物化视图日志记录。

示例

  1. 创建表 test_tbl1

    CREATE TABLE test_tbl1 (col1 INT PRIMARY KEY, col2 VARCHAR(20), col3 INT);
  2. test_tbl1 表上创建物化视图日志。指定并行处理物化视图日志的并行度为 5 和物化视图日志记录 col2 列的变更信息,并且会记录变更前后的新值;配置物化视图日志从当前日期开始,每隔 1 天清理一次过期的物化视图日志记录。

    CREATE MATERIALIZED VIEW LOG ON test_tbl1
    PARALLEL 5
    WITH SEQUENCE(col2) INCLUDING NEW VALUES
    PURGE START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY;
  3. 查看表 test_tbl1 上物化视图日志的信息。

    DESC mlog$_test_tbl1;

    返回结果如下:

    +------------+-------------+------+------+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +------------+-------------+------+------+---------+-------+
    | col1 | int(11) | NO | PRI | NULL | |
    | col2 | varchar(20) | YES | | NULL | |
    | SEQUENCE$$ | bigint(20) | NO | PRI | NULL | |
    | DMLTYPE$$ | varchar(1) | YES | | NULL | |
    | OLD_NEW$$ | varchar(1) | YES | | NULL | |
    +------------+-------------+------+------+---------+-------+
    5 rows in set (0.003 sec)
  4. test_tbl1 表上物化视图日志变更为记录 col2col3 列的变更信息。

    CREATE OR REPLACE MATERIALIZED VIEW LOG ON test_tbl1
    PARALLEL 5
    WITH SEQUENCE(col2 ,col3) INCLUDING NEW VALUES
    PURGE START WITH sysdate() NEXT sysdate() + INTERVAL 1 DAY;
  5. 查看表 test_tbl1 上物化视图日志的信息。

    DESC mlog$_test_tbl1;

    返回结果如下:

    +------------+-------------+------+------+---------+-------+
    | Field | Type | Null | Key | Default | Extra |
    +------------+-------------+------+------+---------+-------+
    | col1 | int(11) | NO | PRI | NULL | |
    | col2 | varchar(20) | YES | | NULL | |
    | col3 | int(11) | YES | | NULL | |
    | SEQUENCE$$ | bigint(20) | NO | PRI | NULL | |
    | DMLTYPE$$ | varchar(1) | YES | | NULL | |
    | OLD_NEW$$ | varchar(1) | YES | | NULL | |
    +------------+-------------+------+------+---------+-------+
    6 rows in set (0.003 sec)

相关文档

物化视图日志