【问题标题】:ClickHouse: How to delete on *AggregatingMergeTree tables from a materialized viewClickHouse:如何从物化视图中删除 *AggregatingMergeTree 表
【发布时间】:2019-08-12 13:48:29
【问题描述】:

有一个结构,其中有一个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

我有 seen here 在保留数据的 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

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    突变不会传播到物化视图。

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

    例如,假设您要从表中删除一条引用某些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'; 
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-25
      • 2021-12-06
      • 2011-10-29
      • 2018-12-28
      • 2021-07-24
      • 2021-10-09
      • 2021-11-28
      相关资源
      最近更新 更多