Skip to main content
Skip to main content

ReplacingMergeTree

Движок отличается от MergeTree тем, что выполняет удаление дублирующихся записей с одинаковым значением ключа сортировки (секция ORDER BY, не PRIMARY KEY).

Дедупликация данных производится лишь во время слияний. Слияние происходят в фоне в неизвестный момент времени, на который вы не можете ориентироваться. Некоторая часть данных может остаться необработанной. Хотя вы можете вызвать внеочередное слияние с помощью запроса OPTIMIZE, на это не стоит рассчитывать, так как запрос OPTIMIZE приводит к чтению и записи большого объёма данных.

Таким образом, ReplacingMergeTree подходит для фоновой чистки дублирующихся данных в целях экономии места, но не даёт гарантии отсутствия дубликатов.

Создание таблицы

Описание параметров запроса смотрите в описании запроса.

Внимание

Уникальность строк определяется ORDER BY секцией таблицы, а не PRIMARY KEY.

Параметры ReplacingMergeTree

ver

ver — столбец с номером версии. Тип UInt*, Date, DateTime или DateTime64. Необязательный параметр.

При слиянии ReplacingMergeTree оставляет только строку для каждого уникального ключа сортировки:

  • Последнюю в выборке, если ver не задан. Под выборкой здесь понимается набор строк в наборе кусков данных, участвующих в слиянии. Последний по времени создания кусок (последняя вставка) будет последним в выборке. Таким образом, после дедупликации для каждого значения ключа сортировки останется самая последняя строка из самой последней вставки.
  • С максимальной версией, если ver задан. Если ver одинаковый у нескольких строк, то для них используется правило -- если ver не задан, т.е. в результате слияния останется самая последняя строка из самой последней вставки.

Пример:

is_deleted

is_deleted — Имя столбца, который используется во время слияния для обозначения того, нужно ли отображать строку или она подлежит удалению; 1 - для удаления строки, 0 - для отображения строки.

Тип данных столбца — UInt8.

Note

is_deleted может быть использован, если ver используется.

Строка удаляется в следующих случаях:

  • при использовании инструкции OPTIMIZE ... FINAL CLEANUP
  • при использовании инструкции OPTIMIZE ... FINAL
  • есть новые версии строки

Не рекомендуется выполнять FINAL CLEANUP, это может привести к неожиданным результатам, например удаленные строки могут вновь появиться.

Вне зависимости от производимых изменений над данными, версия должна увеличиваться. Если у двух строк одна и та же версия, то остается только последняя вставленная строка.

Пример:

Секции запроса

При создании таблицы ReplacingMergeTree используются те же секции, что и при создании таблицы MergeTree.

Устаревший способ создания таблицы
Внимание

Не используйте этот способ в новых проектах и по возможности переведите старые проекты на способ, описанный выше.

Все параметры, кроме ver имеют то же значение, что в и MergeTree.

  • ver — столбец с номером версии. Необязательный параметр. Описание смотрите выше по тексту.