CREATE VIEW 创建物化视图 sql CREATE MATERIALIZED VIEW [IFNOTEXISTS] [db.]tablename [ON CLUSTER] [TO [db.]name] [ENGINEengine] [POPULATE] AS SELECT ... 物化视图存储由相应的SELECT管理。 创建不带 TO [db].[table]的物化视图时,必须指定 ENGINE – 用于存储数据的表引擎。 使用 TO [db].[table] 创建物化视图时,不得使用 POPULATE。 一个物化视图的实现是这样的:当向SELECT中指定的表插入数据时,插入数据的一部分被这个SELECT查询转换,结果插入到视图中。 云数据库ClickHouse中的物化视图更像是插入触发器。 如果视图查询中有一些聚合,则它仅应用于一批新插入的数据。 对源表现有数据的任何更改(如更新、删除、删除分区等)都不会更改物化视图。 如果指定 POPULATE,则在创建视图时将现有表数据插入到视图中,就像创建一个 CREATE TABLE ... AS SELECT ...一样。 否则,查询仅包含创建视图后插入表中的数据。 我们不建议使用POPULATE,因为在创建视图期间插入表中的数据不会插入其中。 SELECT 查询可以包含 DISTINCT、GROUP BY、ORDER BY、LIMIT……,相应的转换是在每个插入数据块上独立执行的。 例如,如果设置了 GROUP BY,则在插入期间聚合数据,但仅在插入数据的单个数据包内。 数据不会被进一步聚合。 例外情况是使用独立执行数据聚合的 ENGINE,例如 SummingMergeTree。 在物化视图上执行ALTER查询有局限性,因此可能不方便。 如果物化视图使用构造 TO [db.]name,你可以 DETACH视图,为目标表运行 ALTER,然后 ATTACH先前分离的(DETACH)视图。 物化视图受optimizeoninsert设置的影响, 在插入视图之前合并数据。 视图看起来与普通表相同。 例如,它们列在 SHOW TABLES查询的结果中。 删除视图,使用DROP VIEW. DROP TABLE也适用于视图。