【问题标题】:ClickHouse: Materialized view is not be timely optimized to merge the partitionsClickHouse:物化视图没有及时优化以合并分区
【发布时间】:2021-04-29 21:49:43
【问题描述】:

我递归地创建了一个表和两个物化视图。

表:

CREATE TABLE `log_details` (
  date String, 
  event_time DateTime, 
  username String, 
  city String) 
ENGINE = MergeTree() 
ORDER BY (date, event_time) 
PARTITION BY date TTL event_time + INTERVAL 1 MONTH

物化视图:

CREATE MATERIALIZED VIEW `log_u_c_day_mv` 
ENGINE = SummingMergeTree() 
PARTITION BY date 
ORDER BY (date, username, city) 
AS 
SELECT date, username, city, count() as times 
FROM `log_details` 
GROUP BY date, username, city
CREATE MATERIALIZED VIEW `log_u_day_mv` 
ENGINE = SummingMergeTree() 
PARTITION BY date 
ORDER BY (date, username) 
AS 
SELECT date, username, SUM(times) as total_times 
FROM `.inner.log_u_c_day_mv` 
GROUP BY date, username

插入log_details → 插入log_u_c_day_mv → 插入log_u_day_mv。

log_u_day_mv 插入log_u_c_day_mv 15 分钟后即使超过一天也没有优化。

我尝试手动优化log_u_day_mv,它可以工作。

OPTIMIZE TABLE `.inner.log_u_day_mv` PARTITION 20210110

但是ClickHouse没有及时优化。 如何解决?

【问题讨论】:

  • 考虑在 FROM 子句中使用 FINAL-modifier。
  • @vladimir 实体化视图不能有 PREWHERE、SAMPLE 或 FINAL..
  • @vladimir 谢谢。我理解你的建议。在 SELECT 查询中使用 FINAL。但它并没有优化 MV 以在后台执行预定的合并。

标签: clickhouse


【解决方案1】:

数据始终未在 MT 中完全聚合/折叠。

如果您执行optimize final,则下一次插入会创建一个新零件。

CH 不会按时间合并部分。合并调度器根据当前节点工作量/零件数量/零件大小,通过自己的算法选择零件。

必须始终使用 sum / groupby 查询 SummingMT。

select sum(times), username
from log_u_day_mv
group by username

请勿使用 from log_u_day_mv FINAL 它读取的列过多!!!!!!!!!!!!!!!

【讨论】:

  • 谢谢丹尼。我会注意到带有聚合函数和 groupby 的查询。
猜你喜欢
  • 2021-11-16
  • 2018-10-27
  • 1970-01-01
  • 2021-12-06
  • 2017-02-03
  • 2021-01-09
  • 2021-07-24
  • 2021-10-09
  • 1970-01-01
相关资源
最近更新 更多