ClickHouse:如何从物化视图中删除 *聚合合并树表



有一个结构,其中有一个base表,然后是一个物化视图base_mv,该视图聚合将结果TOAggregatedMergeTreebase_agg_by_id发送。然后我们可以看到这最后一张桌子。base_unique.与此博客文章类似](https://www.altinity.com/blog/clickhouse-continues-to-crush-time-series)。

但是,如果我从base中删除,我希望base_mv会触发突变,然后对其采取行动,并反映在base_agg_by_id上,但事实并非如此。

这是预期的行为吗?如何在这样的架构中DELETE

我在这里看到,在保存数据的 MV 中,您可以对表.inner进行操作。然而,在这种情况下,由于表来自 AggregatedMergeTree 并且其字段被定义为函数(例如AggregateFunction(argMax, String, DateTime)),我无法通过诸如ALTER base_agg_by_id DELETE WHERE field = 'myval'之类的值应用删除。

注意。作为记录,我们在使用引擎的复制环境中有这些表Replicated*base_dbase_agg_by_id_dbase_unique_d

突变不会传播到具体化视图。

原因很简单:在一般情况下是不可能的。即使在理论上可行的情况下,操作也可能非常昂贵。

例如,假设您要从表中删除一条引用某些userid的记录。您的物化视图包含uniqState( userid ).用于计算uniqState不支持"删除"操作的数据结构;但即使他们会 - 如果不再次重新读取分区的整个数据,也无法决定是否应该删除该用户 ID,因为该用户 ID 也可以在其他记录中看到。

因此,在一般情况下,您需要为AggregatedMergeTree重新填充整个分区。

即类似(每日分区情况):

ALTER amt_table DROP PARTITION '2019-03-01';
-- use same select as in your materialized view
INSERT INTO amt_table SELECT ... WHERE date = '2019-03-01'; 

最新更新