Пытаюсь понять, как работает 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 строки с идентификатором 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)
, я ожидал бы, что слияние в этой таблице заменит строку с id = 1, имеющую более низкую версию 2.
Запуск слияния с 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 │
└───────┴─────────┴────────┴────────────┴─────────┘
OPTIMIZE TABLE table FINAL
? Также покажите нам оператор создания таблицы. - person Ramazan Polat   schedule 04.08.2019