clickhouse:如何从物化视图中删除*aggregatingmergetree表

mo49yndu  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(1)|浏览(821)

有一个结构,其中有一个 base 表,然后是物化视图 base_mv 发送结果 TOAggregatedMergeTreebase_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

u5i3ibmn

u5i3ibmn1#

突变不会传播到物化视图。
原因很简单:在一般情况下是不可能的。即使在理论上可能的情况下,这也是非常昂贵的操作。
例如,假设您要从表中删除一条引用了 userid . 你的物化视图包含 uniqState( userid ) . 用于计算的数据结构 uniqState 不支持“删除”操作;但是,即使他们愿意-如果不重新读取分区的整个数据,就无法决定是否应该删除该用户标识,因为该用户标识也可以在其他记录中看到。
所以在一般情况下,需要为aggregatedmergetree重新填充整个分区。
i、 e.类似于(日常情况):

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';

相关问题