ClickHouse:如何从物化视图中删除 *AggregatingMergeTree 表
ClickHouse: How to delete on *AggregatingMergeTree tables from a materialized view
有一个结构,其中有一个 base
table,然后是一个物化视图 base_mv
聚合发送结果 TO
和 AggregatedMergeTree
table base_agg_by_id
。然后我们对这个最后的table有一个看法。 base_unique
。与此博客中的类似 post](https://www.altinity.com/blog/clickhouse-continues-to-crush-time-series)。
但是,如果我从 base
中删除,我希望 base_mv
会触发突变然后对其进行操作,并反映在 base_agg_by_id
上,但它不会'吨。
这是预期的行为吗?如何在这样的架构中DELETE
?
我 seen here 在保留数据的 MV 中,您可以对 .inner
table 采取行动。但是在这种情况下,由于 table 来自 AggregatedMergeTree 并且其字段被定义为函数(例如 AggregateFunction(argMax, String, DateTime)
),我无法通过 ALTER base_agg_by_id DELETE WHERE field = 'myval'
.[= 等值应用删除29=]
注意。作为记录,我们在使用 Replicated*
引擎的复制环境中拥有这些 table:base_d
、base_agg_by_id_d
、base_unique_d
突变不会传播到物化视图。
原因很简单:在一般情况下不可能。即使在理论上可行的情况下,它也可能是非常昂贵的操作。
例如,假设您要从 table 中删除一条引用某些 userid
的记录。并且您的实体化视图包含 uniqState( userid )
。用于计算uniqState
的数据结构不支持'remove'操作;但即使他们愿意 - 如果不重新读取分区的整个数据,也无法决定是否应该删除该用户 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';
有一个结构,其中有一个 base
table,然后是一个物化视图 base_mv
聚合发送结果 TO
和 AggregatedMergeTree
table base_agg_by_id
。然后我们对这个最后的table有一个看法。 base_unique
。与此博客中的类似 post](https://www.altinity.com/blog/clickhouse-continues-to-crush-time-series)。
但是,如果我从 base
中删除,我希望 base_mv
会触发突变然后对其进行操作,并反映在 base_agg_by_id
上,但它不会'吨。
这是预期的行为吗?如何在这样的架构中DELETE
?
我 seen here 在保留数据的 MV 中,您可以对 .inner
table 采取行动。但是在这种情况下,由于 table 来自 AggregatedMergeTree 并且其字段被定义为函数(例如 AggregateFunction(argMax, String, DateTime)
),我无法通过 ALTER base_agg_by_id DELETE WHERE field = 'myval'
.[= 等值应用删除29=]
注意。作为记录,我们在使用 Replicated*
引擎的复制环境中拥有这些 table:base_d
、base_agg_by_id_d
、base_unique_d
突变不会传播到物化视图。
原因很简单:在一般情况下不可能。即使在理论上可行的情况下,它也可能是非常昂贵的操作。
例如,假设您要从 table 中删除一条引用某些 userid
的记录。并且您的实体化视图包含 uniqState( userid )
。用于计算uniqState
的数据结构不支持'remove'操作;但即使他们愿意 - 如果不重新读取分区的整个数据,也无法决定是否应该删除该用户 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';