CREATE MATERIALIZED VIEW
功能
创建物化视图。关于物化视图适用的场景请参考同步物化视图和异步物化视图。
创建物化视图是一个异步的操作。该命令执行成功即代表创建物化视图的任务提交成功。您可以通过 SHOW ALTER MATERIALIZED VIEW 命令查看当前数据库中同步物化视图的构建状态,或通过查询 Information Schema 中的 tasks
和 task_runs
来查看异步物化视图的构建状态。
注意
只有拥有基表所在数据库的 CREATE MATERIALIZED VIEW 权限的用户才可以创建物化视图。
StarRocks 自 v2.4 起支持异步物化视图。异步物化视图与先前版本中的同步物化视图区别主要体现在以下方面:
单表聚合 | 多表关联 | 查询改写 | 刷新策略 | 基表 | |
---|---|---|---|---|---|
异步物化视图 | 是 | 是 | 是 |
| 支持多表构建。基表可以来自:
|
同步物化视图(Rollup) | 仅部分聚合函数 | 否 | 是 | 导入同步刷新 | 仅支持基于 Default Catalog 的单表构建 |
同步物化视图
语法
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [database.]<mv_name>
[COMMENT ""]
[PROPERTIES ("key"="value", ...)]
AS
<query_statement>
参数
mv_name(必填)
物化视图的名称。命名要求如下:
- 必须由字母(a-z 或 A-Z)、数字(0-9)或下划线(_)组成,且只能以字母开头。
- 总长度不能超过 64 个字符。
- 视图名大小写敏感。
COMMENT(选填)
物化视图的注释。注意建立物化视图时 COMMENT
必须在 mv_name
之后,否则创建失败。
query_statement(必填)
创建物化视图的查询语句,其结果即为物化视图中的数据。语法如下:
SELECT select_expr[, select_expr ...]
[WHERE where_expr]
[GROUP BY column_name[, column_name ...]]
[ORDER BY column_name[, column_name ...]]
-
select_expr(必填)
构建同步物化视图的查询语句。
-
单列或聚合列:形如
SELECT a, b, c FROM table_a
,其中a
、b
和c
为基表的列名。如果您没有为物化视图指定列名,那么 StarRocks 自动为这些列命名。 -
表达式:形如
SELECT a+1 AS x, b+2 AS y, c*c AS z FROM table_a
,其中a+1
、b+2
和c*c
为包含基表列名的表达式,x
、y
和z
为物化视图的列名。
说明
- 该参数至少需包含一个单列。
- 使用聚合函数创建同步物化视图时,必须指定 GROUP BY 子句,并在
select_expr
中指定至少一个 GROUP BY 列。 - 同步物化视图不支持 JOIN、以及 GROUP BY 的 HAVING 子句。
- 从 v3.1 开始,每个同步物化视图支持为基表的每一列使用多个聚合函数,支持形如
select b, sum(a), min(a) from table group by b
形式的查询语 句。 - 从 v3.1 开始,同步物化视图支持 SELECT 和聚合函数的复杂表达式,即形如
select b, sum(a + 1) as sum_a1, min(cast (a as bigint)) as min_a from table group by b
或select abs(b) as col1, a + 1 as col2, cast(a as bigint) as col3 from table
的查询语句。同步物化视图的复杂表达式有以下限制:- 每个复杂表达式必须有一个列名,并且基表所有同步物化视图中的不同复杂表达式的别名必须不同。例如,查询语句
select b, sum(a + 1) as sum_a from table group by b
和select b, sum(a) as sum_a from table group by b
不能同时用于为相同的基表创建同步物化视图,你可以为同一复杂表达式设置多个不同别名。 - 您可以通过执行
EXPLAIN <sql_statement>
来查看您的查询是否被使用复杂表达式创建的同步物化视图改写。更多信息请参见查询分析。
- 每个复杂表达式必须有一个列名,并且基表所有同步物化视图中的不同复杂表达式的别名必须不同。例如,查询语句
-
-
WHERE (选填)
自 v3.1.8 起,同步物化视图支持通过 WHERE 子句筛选数据。
-
GROUP BY(选填)
构建物化视图查询语句的分组列。如不指定该参数,则默认不对数据进行分组。
-
ORDER BY(选填)
构建物化视图查询语句的排序列。
-
排序列的声明顺序必须和
select_expr
中列声明顺序一致。 -
如果查询语句中包含分组列,则排序列必须和分组列一致。
-
如果不指定排序列,则系统根据以下规则自动补充排序列:
- 如果物化视图是聚合类型,则所有的分组列自动补充为排序列。
- 如果物化视图是非聚合类型,则系统根据前缀列自动选择排序列。
-