有一个结构,其中有一个 base
表,然后是物化视图 base_mv
发送结果 TO
一 AggregatedMergeTree
表 base_agg_by_id
. 然后我们可以看到最后一张table。 base_unique
. 与本文类似](https://www.altinity.com/blog/clickhouse-continues-to-crush-time-series).
但是,如果我从 base
,我希望 base_mv
会触发突变,然后对其起作用,并反映在 base_agg_by_id
,但事实并非如此。
这是预期的行为吗?如何 DELETE
在这样的模式中?
我在这里看到,在mvs中,您可以对保存的数据进行操作 .inner
table。但是在这种情况下,由于表来自aggregatedmergetree,其字段定义为函数(例如。 AggregateFunction(argMax, String, DateTime)
),我无法通过以下值应用删除 ALTER base_agg_by_id DELETE WHERE field = 'myval'
.
注意。作为记录,我们在复制环境中使用 Replicated*
发动机: base_d
, base_agg_by_id_d
, base_unique_d
1条答案
按热度按时间u5i3ibmn1#
突变不会传播到物化视图。
原因很简单:在一般情况下是不可能的。即使在理论上可能的情况下,这也是非常昂贵的操作。
例如,假设您要从表中删除一条引用了
userid
. 你的物化视图包含uniqState( userid )
. 用于计算的数据结构uniqState
不支持“删除”操作;但是,即使他们愿意-如果不重新读取分区的整个数据,就无法决定是否应该删除该用户标识,因为该用户标识也可以在其他记录中看到。所以在一般情况下,需要为aggregatedmergetree重新填充整个分区。
i、 e.类似于(日常情况):