更新时间:2024-04-29 GMT+08:00
CREATE MATERIALIZED VIEW
本章节介绍如何在ClickHouse中创建物化视图。
创建物化视图
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]Materialized_name [TO[db.]name] [ON CLUSTERClickHouse集群名] ENGINE = engine_name() ORDER BY expr [POPULATE] AS SELECT ...
参数 |
说明 |
---|---|
db |
数据库的名称,默认为当前选择的数据库。 |
Materialized_name |
物化视图名。 |
TO[db.]name |
将物化视图的数据写入到新表中。 |
[ON CLUSTERClickHouse集群名] |
在每一个节点上都创建一个物化视图,固定为ON CLUSTER ClickHouse集群名。 |
ENGINE = engine_name() |
表引擎类型。 |
[POPULATE] |
POPULATE关键字。如果创建物化视图时指定了POPULATE关键字,则在创建时将SELECT子句所指定的源表数据插入到物化视图中。不指定POPULATE关键字时,物化视图只会包含在物化视图创建后新写入源表的数据。
说明:
一般不推荐使用POPULATE关键字,因为在物化视图创建期间写入源表的数据将不会写入物化视图中。 |
SELECT ... |
SELECT子句。当数据写入物化视图中SELECT子句所指定的源表时,插入的数据会通过SELECT子句查询进行转换并将最终结果插入到物化视图中。
说明:
SELECT查询可以包含DISTINCT、GROUP BY、ORDER BY和LIMIT等,但是相应的转换是在每个插入数据块上独立执行的。 |
示例:
- 创建源表。
create table DB.table1 ON CLUSTER default_cluster (id Int16,name String) ENGINE = MergeTree() ORDER BY (id);
- 插入数据。
insert into DB.table1 values(1,'X'),(2,'Y'),(3,'Z');
- 创建基于源表的物化视图。
CREATE MATERIALIZED VIEW demo_view ON CLUSTER default_cluster ENGINE = MergeTree() ORDER BY (id) AS SELECT * FROM DB.table1;
- 查询物化视图。
SELECT * FROM demo_view;
查询数据为空,说明未指定POPULATE关键字时,查询不到物化视图创建前写入源表的数据。
- DB.table1表中插如数据。
insert into demo_view values(4,'x'),(5,'y'),(6,'z');
- 查询物化视图。
SELECT * FROM demo_view;
查询结果。
┌─id─┬─name─┐ │ 4 │ x │ │ 5 │ y │ │ 6 │ z │ └────┴──────┘
父主题: SQL语法参考