为啥我们不能在 clickhouse 的另一个视图之上制作物化视图?

Posted

技术标签:

【中文标题】为啥我们不能在 clickhouse 的另一个视图之上制作物化视图?【英文标题】:Why we can't make materialized view on top of another view in clickhouse?为什么我们不能在 clickhouse 的另一个视图之上制作物化视图? 【发布时间】:2020-05-09 06:52:17 【问题描述】:

A 是一个 collapsingMergeTree 引擎表

CREATE VIEW A AS SELECT * FROM A final;

创建物化视图 a_mview1 到 B AS选择ID, 姓名 来自A;

这不起作用,似乎我们无法在视图上显示 mview..但是为什么?

【问题讨论】:

【参考方案1】:

CREATE VIEW A AS SELECT * FROM A final;

这是不可能的。因为 MV 从不读取源表。 MV 从 INSERT 命令获取插入的块。

【讨论】:

【参考方案2】:

普通视图不存储任何数据(参见doc),因此将其用作Materialized视图的数据源是错误的。

需要根据原始表创建物化视图:

CREATE TABLE A (
  ..
) ENGINE = CollapsingMergeTree
.. ;

CREATE MATERIALIZED VIEW a_mview1 TO B 
AS 
SELECT ..
FROM A
.. ;

详情请看文章ClickHouse Materialized Views Illuminated。

【讨论】:

以上是关于为啥我们不能在 clickhouse 的另一个视图之上制作物化视图?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能将 clickhouse json 函数应用于“FORMAT JSON”查询结果?

为啥我可以从 android 中的另一个线程更新视图?

clickhouse-物化视图

自动布局 - 为啥“垂直间距”有时会附加到视图的另一侧?

ClickHouse Kafka引擎不消费问题排查

为啥我不能直接使用不在函数后面的另一个表中的列?