我试图了解ReplacingMergeTree
引擎是如何工作的。
我用这样的引擎配置了下表。
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-09-29 │ 2 │
│ IM │ FR │ 2 │ 2017-09-29 │ 0 │
│ IM │ FR │ 3 │ 2017-09-29 │ 1 │
└───────┴─────────┴────────┴────────────┴─────────┘
此时一切正常。
然后我执行以下INSERT
.
INSERT INTO table(brand, country, id, updated, version) VALUES ('IM', 'FR', 1, '2017-10-29', 3);
正如预期的那样,有 2 行 id 1
:
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-09-29 │ 2 │
│ IM │ FR │ 2 │ 2017-09-29 │ 0 │
│ IM │ FR │ 3 │ 2017-09-29 │ 1 │
└───────┴─────────┴────────┴────────────┴─────────┘
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-10-29 │ 3 │
└───────┴─────────┴────────┴────────────┴─────────┘
由于该表的主键是(brand, country, id)
,因此我希望该表上的合并将替换具有较低版本 2 的 id=1 的行。
触发合并OPTIMIZE TABLE table
以检查,似乎它没有以这种方式工作,并且两行都令人惊讶地保留了下来。
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-10-29 │ 3 │
└───────┴─────────┴────────┴────────────┴─────────┘
┌─brand─┬─country─┬─id─────┬────updated─┬─version─┐
│ IM │ FR │ 1 │ 2017-09-29 │ 2 │
│ IM │ FR │ 2 │ 2017-09-29 │ 0 │
│ IM │ FR │ 3 │ 2017-09-29 │ 1 │
└───────┴─────────┴────────┴────────────┴─────────┘