======================== CREATE MATERIALIZED VIEW ======================== .. container:: refentry :name: SQL-CREATEMATERIALIZEDVIEW .. container:: titlepage .. container:: refnamediv .. rubric:: CREATE MATERIALIZED VIEW :name: create-materialized-view CREATE MATERIALIZED VIEW — 定义一个新的物化视图 .. container:: refsynopsisdiv .. rubric:: 大纲 :name: 大纲 .. code:: synopsis CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] table_name [ (column_name [, ...] ) ] [ USING method ] [ WITH ( storage_parameter [= value] [, ... ] ) ] [ TABLESPACE tablespace_name ] AS query [ WITH [ NO ] DATA ] .. container:: refsect1 :name: id-1.9.3.71.5 .. rubric:: 描述 :name: 描述 ``CREATE MATERIALIZED VIEW``\ 定义一个查询的物化视图。 在该命令被发出时,查询会被执行并且被用来填充该视图(除非使用了 ``WITH NO DATA``\ ),并且后来可能会用 ``REFRESH MATERIALIZED VIEW``\ 进行刷新。 ``CREATE MATERIALIZED VIEW``\ 类似于 ``CREATE TABLE AS``\ ,不过它还会记住被用来初始化该视图的查询, 这样它可以在后来被命令刷新。一个物化视图有很多和表相同的属性,但是不支持 临时物化视图。 .. container:: refsect1 :name: id-1.9.3.71.6 .. rubric:: 参数 :name: 参数 .. container:: variablelist ``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``\ 被使用前不能被查询。 .. container:: refsect1 :name: id-1.9.3.71.7 .. rubric:: 兼容性 :name: 兼容性 ``CREATE MATERIALIZED VIEW``\ 是一种 OushuDB 扩展。 .. container:: refsect1 :name: SQL-optionalparams .. rubric:: 可选参数 :name: 可选参数 .. code:: synopsis optionalparams [ = value] 物化视图的可选参数主要是为了物化视图的自动刷新和查询重写而指定,这些参数包括: 参数说明 -------- REFRESH_METHOD ^^^^^^^^^^^^^^ .. code:: synopsis REFRESH_METHOD = {AUTO/INCREMENTAL/FULL} - **功能**:指定物化视图的刷新方法。 - **可选值**: - ``AUTO``:自动选择刷新模式。 - ``INCREMENTAL``:增量刷新(当前版本暂不支持)。 - ``FULL``:全量刷新。 - **默认值**:``AUTO`` REFRESH_TIME ^^^^^^^^^^^^ .. code:: synopsis REFRESH_TIME = {FOLLOW_SCHEDULE/ON_COMMIT} - **功能**:指定物化视图的刷新时机。 - **可选值**: - ``FOLLOW_SCHEDULE``:按照时间表刷新(当前版本暂不支持)。 - ``ON_COMMIT``:在原表执行DML操作时刷新物化视图。 - **默认值**:``FOLLOW_SCHEDULE`` SCHEDULE_START ^^^^^^^^^^^^^^ .. code:: synopsis SCHEDULE_START = 'timestamp/never' - **功能**:指定第一次刷新的开始时间。 - **生效条件**:``REFRESH_TIME`` 设置为 ``FOLLOW_SCHEDULE`` 时生效。 - **可选值**: - ``never``:不会自动刷新。 - ``timestamp``:时间戳类型。 - **默认值**:``never`` SCHEDULE_INTERVAL ^^^^^^^^^^^^^^^^^^ .. code:: synopsis SCHEDULE_INTERVAL = 'interval' - **功能**:指定两次刷新之间的时间间隔。 - **生效条件**:``REFRESH_TIME`` 设置为 ``FOLLOW_SCHEDULE`` 时生效。 - **可选值**: - ``never``:不会自动刷新。 - ``interval``:时间间隔类型。 - **默认值**:``never`` ENABLE_REWRITE ^^^^^^^^^^^^^^ .. code:: synopsis ENABLE_REWRITE = {TRUE/FALSE} - **功能**:表明物化视图是否加入透明查询重写加速。 - **可选值**: - ``TRUE``:启用查询重写。 - ``FALSE``:禁用查询重写。 - **默认值**:``TRUE`` 使用说明 -------- 目前支持物化视图按照时间表更新,需要以下配置: 1. 将 ``REFRESH_TIME`` 设置为 ``FOLLOW_SCHEDULE``。 2. 指定第一次刷新开始时间 ``SCHEDULE_START``。 3. 设置刷新周期 ``SCHEDULE_INTERVAL``。 示例 ^^^^ 以下为一个配置示例: .. code:: sql 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`` 处理刷新任务。 注意事项 -------- .. note:: .. rubric:: 注意 :name: 注意 :class: title SCHEDULE_INTERVAL不宜选择太小的值,这会物化视图的导致频繁刷新,过多的后台任务会占用太多数据库资源,影响正常的任务。 当前版本暂不支持 ``INCREMENTAL`` 刷新和 ``FOLLOW_SCHEDULE`` 刷新模式。 配置资源队列时,请确保队列名称正确且具备足够资源。 .. container:: refsect1 :name: id-1.9.3.71.9 .. rubric:: 另见 :name: 另见 `ALTER MATERIALIZED VIEW `__, `CREATE TABLE AS `__, `CREATE VIEW `__, `DROP MATERIALIZED VIEW `__, `REFRESH MATERIALIZED VIEW `__