首页/数据/NoSQL 速查/ReplacingMergeTree 去重存储
本包目录(322 条)
MongoDB99 条Elasticsearch89 条
ClickHouse56 条
时序与列式28 条选型与架构50 条

ReplacingMergeTree 去重存储

ReplacingMergeTree 在合并时按排序键保留版本号最大的行,实现去重;重复消除发生在合并时且只在同分区内,查询未合并数据要用 FINAL 或聚合手段。

NoSQL 速查数据更新于 2026-10-12
引擎参数ReplacingMergeTree([ver]):ver 为版本列,缺省保留最后写入的行
去重范围同一分区内、排序键相同的行;跨分区不会去重
读取方式SELECT … FINAL,或用 GROUP BY + argMax 手工取最新

示例

示例
CREATE TABLE users
(
    id UInt64,
    name String,
    updated_at DateTime
)
ENGINE = ReplacingMergeTree(updated_at)
ORDER BY id;

INSERT INTO users VALUES (1, 'alice', now() - 100), (1, 'alice-new', now());

SELECT * FROM users FINAL WHERE id = 1;
典型用法是 CDC 同步场景:每条变更记录带版本(时间戳或 LSN)写入,后台合并自动收敛为最新状态。

易错点

  • 以为写入即可去重、不使用 FINAL 会看到重复行,统计口径错误
  • 版本列相同且重复时保留哪一行不确定,版本列应保证严格递增

数据来源与参考

  • ClickHouse Docs: ReplacingMergeTree
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌