为何FINAL修饰符无法触发ClickHouse的合并流程?
ReplacingMergeTree执行FINAL后计数未更新的原因
FINAL只是查询时临时计算去重结果,不会修改磁盘上的物理数据。它相当于在查询过程中临时对涉及的数据执行合并去重逻辑,返回正确结果,但磁盘里的原始重复数据依然存在,后台也不会触发物理合并任务。- 不带
FINAL的count(1)直接读取磁盘上未合并的原始数据,所以计数还是原来的数值。 - 要真正让磁盘数据完成合并去重,需要执行手动合并命令:
这个命令会强制触发物理合并,清理掉磁盘上的重复数据,之后普通查询就能得到正确计数。OPTIMIZE TABLE tbl FINAL; - 另外,ReplacingMergeTree的自动合并由后台调度器异步执行,需要等待系统自动触发,
FINAL查询不会干预这个过程。
内容的提问来源于stack exchange,提问作者KAs
相关产品推荐
相关产品推荐

