首页/数据/NoSQL 速查/FINAL 去重读取
ClickHouse56 条

FINAL 去重读取

FINAL 在查询时按排序键对 ReplacingMergeTree 等表做去重/折叠,得到合并完成后的逻辑结果;代价是读取放大,适合小范围查询或对账,长跑查询要评估开销。

NoSQL 速查数据更新于 2026-10-12
写法SELECT … FROM t [FINAL] WHERE …
作用范围ReplacingMergeTree、CollapsingMergeTree、SummingMergeTree 等家族
替代方案对聚合并发要求高时用 GROUP BY + argMax 或预聚合表替代全表 FINAL

示例

示例
-- 取每个 id 的最新一行(ReplacingMergeTree 语义)
SELECT id, name, ts
FROM users FINAL
WHERE id IN (1, 2, 3);

-- 等价的手写去重方式
SELECT id, argMax(name, ts) AS name, max(ts) AS ts
FROM users
WHERE id IN (1, 2, 3)
GROUP BY id;
FINAL 的行为与后台合并进度有关:未合并的重复行由查询时处理,所以结果始终符合语义,只是慢。

易错点

  • 大表全量 FINAL 查询可能比普通查询慢一个量级,先限定分区与时间范围
  • FINAL 只保证按排序键去重,业务唯一键与排序键不一致时要先调整表设计

数据来源与参考

  • ClickHouse Docs: FINAL clause
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌