全部产品
Search
文档中心

云数据库 ClickHouse:CREATE MATERIALIZED VIEW

更新时间:Mar 18, 2024

本文介绍如何在云数据库ClickHouse中创建物化视图。

创建物化视图

语法:

CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]Materialized_name [TO[db.]name] [ON CLUSTER cluster] 
ENGINE = engine_name()
ORDER BY expr 
[POPULATE] 
AS SELECT ...

参数说明:

参数

说明

db

数据库的名称,默认为当前选择的数据库,本文以default为例。

Materialized_name

物化视图名。

TO[db.]name

将物化视图的数据写入到新表中。

说明

如果需要将物化视图的数据写入新表,不能使用POPULATE关键字。

[ON CLUSTER cluster]

在每一个节点上都创建一个物化视图,固定为ON CLUSTER default

ENGINE = engine_name()

表引擎类型,具体请参见表引擎

[POPULATE]

POPULATE关键字。如果创建物化视图时指定了POPULATE关键字,则在创建时将SELECT子句所指定的源表数据插入到物化视图中。不指定POPULATE关键字时,物化视图只会包含在物化视图创建后新写入源表的数据。

说明

一般不推荐使用POPULATE关键字,因为在物化视图创建期间写入源表的数据将不会写入物化视图中。

SELECT ...

SELECT子句。当数据写入物化视图中SELECT子句所指定的源表时,插入的数据会通过SELECT子句查询进行转换并将最终结果插入到物化视图中。

说明

SELECT查询可以包含DISTINCTGROUP BYORDER BYLIMIT等,但是相应的转换是在每个插入数据块上独立执行的。

示例:

  1. 创建SELECT子句指定的源表。

    CREATE TABLE test ON CLUSTER default (
      id Int32,
      name String
    ) ENGINE = ReplicatedMergeTree()
        ORDER BY (id);
  2. 写入数据至源表。

    INSERT INTO test VALUES(1,'a'),(2,'b'),(3,'c');
  3. 创建基于源表的物化视图。

    CREATE MATERIALIZED VIEW test_view ON CLUSTER default
    ENGINE = MergeTree()
    ORDER BY (id) AS SELECT * FROM test;
  4. 查询物化视图,验证未指定POPULATE关键字时,是否能查询到物化视图创建前写入源表的数据。

    SELECT * FROM test_view;

    查询数据为空,说明未指定POPULATE关键字时,查询不到物化视图创建前写入源表的数据。

  5. 写入数据至源表。

    INSERT INTO test VALUES(4,'a'),(5,'b'),(6,'c');
  6. 查询物化视图。

    SELECT * FROM test_view;

    查询结果如下。

    id│name
     ─│──
     4│ a
     5│ b 
     6│ c

参考文档

创建物化视图的更多信息,请参见Create Materialized View