我开始使用 clickhouse,我注意到有两种“类型”的使用物化视图的方法。
第一个是首先使用MergeTree引擎创建一个表并将mv“添加”到表中:
CREATE MATERIALIZED VIEW my_view TO my_target_table AS
SELECT toStartOfDay(_timestamp)::Date AS Day, ...
FROM my_source_table
但我也可以只使用没有 target_table 的视图:
CREATE MATERIALIZED VIEW my_view AS
SELECT toStartOfDay(_timestamp)::Date AS Day, ...
FROM my_source_table
Fox 上下文我的源表当前只是一个监听 RabbitMQ 队列的表。因此,在更复杂的情况下,两种方法之间可能有更重要的考虑因素,但我没有看到我的情况有任何差异,我想知道我是否遗漏了一些东西。
一般我们更喜欢前者,它更明确,并且将目标表与视图解耦。这具有管理优势,例如您可以删除MV而不删除目标表。此外,查询解耦的目标表可确保使用所有优化 - 历史上(需要测试情况是否仍然如此)后一种隐式方法不会使用某些优化。
一般要显式,先创建目标表。