SelectDB Enterprise
参考手册
SQL 语句
表和视图
同步物化视图
CREATE SYNC MATERIALIZED VIEW

CREATE SYNC MATERIALIZED VIEW

描述

创建同步物化视图语句

语法

CREATE MATERIALIZED VIEW <materialized_view_name> AS <query>            

其中

query
    :
    SELECT <select_expr> select_expr[, select_expr ...]
    FROM <base_table>
    GROUP BY <column_name>[, <column_name> ...]
    ORDER BY <column_name>[, <column_name> ...]

必选参数

1. <materialized_view_name>

指定表的标识符(即名称);同步物化视图基于表创建,所以名称需要在相同表中必须唯一。

标识符必须以字母字符(如果开启 unicode 名字支持,则可以是任意语言文字的字符)开头,并且不能包含空格或特殊字符,除非整个标识符字符串用反引号括起来(例如My Object)。

标识符不能使用保留关键字。

有关更多详细信息,请参阅标识符要求和保留关键字。

2. <query>

用于构建物化视图的查询语句,查询语句的结果既物化视图的数据。目前支持的 query 格式为:

语法和查询语句语法一致。

  • select_expr:物化视图的 schema 中所有的列。
    • 至少包含一个单列。
  • base_table:物化视图的原始表名,必填项。
    • 必须是单表,且非子查询
  • group by:物化视图的分组列,选填项。
    • 不填则数据不进行分组。
  • order by:物化视图的排序列,选填项。
    • 排序列的声明顺序必须和 select_expr 中列声明顺序一致。
    • 如果不声明 order by,则根据规则自动补充排序列。如果物化视图是聚合类型,则所有的分组列自动补充为排序列。如果物化视图是非聚合类型,则前 36 个字节自动补充为排序列。
    • 如果自动补充的排序个数小于 3 个,则前三个作为排序列。如果 query 中包含分组列的话,则排序列必须和分组列一致。

权限控制

权限(Privilege)对象(Object)说明(Notes)
ALTER_PRIV表(Table)需要拥有当前物化视图基表的 ALTER_PRIV 权限

注意事项

  • 同步物化视图只支持针对单个表的 SELECT 语句,支持 WHERE、GROUP BY、ORDER BY 等子句,但不支持 JOIN、HAVING、LIMIT 子句和 LATERAL VIEW。
  • SELECT 列表中,不能包含自增列,不能包含常量,不能有重复表达式,也不支持窗口函数。
  • 如果 SELECT 列表包含聚合函数,则聚合函数必须是根表达式(不支持 sum(a) + 1,支持 sum(a + 1)),且聚合函数之后不能有其他非聚合函数表达式(例如,SELECT x, sum(a) 可以,而 SELECT sum(a), x 不行)。
  • 单表上过多的物化视图会影响导入的效率:导入数据时,物化视图和 Base 表的数据是同步更新的。如果一张表的物化视图表过多,可能会导致导入速度变慢,这就像单次导入需要同时导入多张表的数据一样。
  • 物化视图针对 Unique Key 数据模型时,只能改变列的顺序,不能起到聚合的作用。因此,在 Unique Key 模型上不能通过创建物化视图的方式对数据进行粗粒度的聚合操作。

示例

desc lineitem;
+-----------------+---------------+------+-------+---------+-------+
| Field           | Type          | Null | Key   | Default | Extra |
+-----------------+---------------+------+-------+---------+-------+
| l_orderkey      | int           | No   | true  | NULL    |       |
| l_partkey       | int           | No   | true  | NULL    |       |
| l_suppkey       | int           | No   | true  | NULL    |       |
| l_linenumber    | int           | No   | true  | NULL    |       |
| l_quantity      | decimal(15,2) | No   | false | NULL    | NONE  |
| l_extendedprice | decimal(15,2) | No   | false | NULL    | NONE  |
| l_discount      | decimal(15,2) | No   | false | NULL    | NONE  |
| l_tax           | decimal(15,2) | No   | false | NULL    | NONE  |
| l_returnflag    | char(1)       | No   | false | NULL    | NONE  |
| l_linestatus    | char(1)       | No   | false | NULL    | NONE  |
| l_shipdate      | date          | No   | false | NULL    | NONE  |
| l_commitdate    | date          | No   | false | NULL    | NONE  |
| l_receiptdate   | date          | No   | false | NULL    | NONE  |
| l_shipinstruct  | char(25)      | No   | false | NULL    | NONE  |
| l_shipmode      | char(10)      | No   | false | NULL    | NONE  |
| l_comment       | varchar(44)   | No   | false | NULL    | NONE  |
+-----------------+---------------+------+-------+---------+-------+
CREATE MATERIALIZED VIEW sync_agg_mv AS
SELECT 
  l_shipdate,
  l_partkey,
  count(*),
  sum(l_discount)
FROM
  lineitem
GROUP BY
  l_shipdate,
  l_partkey;
© 2025 北京飞轮数据科技有限公司 京ICP备2022004029号 | Apache、Apache Doris 以及相关开源项目名称均为 Apache 基金会商标