CREATE SYNC MATERIALIZED VIEW
更新时间:2025-10-15
描述
创建同步物化视图语句
语法
SQL
1CREATE MATERIALIZED VIEW <materialized_view_name> AS <query>
其中
SQL
1query
2 :
3 SELECT <select_expr> select_expr[, select_expr ...]
4 FROM <base_table>
5 GROUP BY <column_name>[, <column_name> ...]
6 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 模型上不能通过创建物化视图的方式对数据进行粗粒度的聚合操作。
示例
SQL
1desc lineitem;
Text
1+-----------------+---------------+------+-------+---------+-------+
2| Field | Type | Null | Key | Default | Extra |
3+-----------------+---------------+------+-------+---------+-------+
4| l_orderkey | int | No | true | NULL | |
5| l_partkey | int | No | true | NULL | |
6| l_suppkey | int | No | true | NULL | |
7| l_linenumber | int | No | true | NULL | |
8| l_quantity | decimal(15,2) | No | false | NULL | NONE |
9| l_extendedprice | decimal(15,2) | No | false | NULL | NONE |
10| l_discount | decimal(15,2) | No | false | NULL | NONE |
11| l_tax | decimal(15,2) | No | false | NULL | NONE |
12| l_returnflag | char(1) | No | false | NULL | NONE |
13| l_linestatus | char(1) | No | false | NULL | NONE |
14| l_shipdate | date | No | false | NULL | NONE |
15| l_commitdate | date | No | false | NULL | NONE |
16| l_receiptdate | date | No | false | NULL | NONE |
17| l_shipinstruct | char(25) | No | false | NULL | NONE |
18| l_shipmode | char(10) | No | false | NULL | NONE |
19| l_comment | varchar(44) | No | false | NULL | NONE |
20+-----------------+---------------+------+-------+---------+-------+
SQL
1CREATE MATERIALIZED VIEW sync_agg_mv AS
2SELECT
3 l_shipdate,
4 l_partkey,
5 count(*),
6 sum(l_discount)
7FROM
8 lineitem
9GROUP BY
10 l_shipdate,
11 l_partkey;
