| 引擎参数 | CollapsingMergeTree(sign),sign 取值 1 或 -1 |
|---|---|
| 合并行为 | 同排序键的一对 +1/-1 行在合并时抵消,数据量随时间收敛 |
| 读取修正 | SELECT … , sum(Sign) as s … GROUP BY key HAVING sum(Sign) > 0 |
| 替代 | VersionedCollapsingMergeTree(sign, version) 用版本列允许乱序到达 |
示例
示例
CREATE TABLE page_views
(
user_id UInt64,
views UInt64,
Sign Int8
)
ENGINE = CollapsingMergeTree(Sign)
ORDER BY user_id;
-- 变更时写入取消行 + 新状态行(插入顺序遵循官方示例)
INSERT INTO page_views VALUES (1001, 7, 1);
INSERT INTO page_views VALUES (1001, 7, -1), (1001, 8, 1);
-- 未折叠数据按 Sign 修正读取
SELECT user_id, sum(views * Sign) AS v
FROM page_views
GROUP BY user_id
HAVING sum(Sign) > 0;折叠依赖合并,未合并时同一主键会出现多行;业务读取不写 FINAL 时用上面这个标准修正写法。