2020-03-20 18:20:59 +00:00
# ReplacingMergeTree {#replacingmergetree}
2017-03-12 17:58:51 +00:00
2018-12-12 17:28:00 +00:00
Движок отличается от [MergeTree ](mergetree.md#table_engines-mergetree ) тем, что выполняет удаление дублирующихся записей с одинаковым значением первичного ключа (точнее, с одинаковым значением [ключа сортировки ](mergetree.md )).
2017-03-12 17:58:51 +00:00
2018-10-19 11:25:22 +00:00
Дедупликация данных производится лишь во время слияний. Слияние происходят в фоне в неизвестный момент времени, на который вы не можете ориентироваться. Некоторая часть данных может остаться необработанной. Хотя вы можете вызвать внеочередное слияние с помощью запроса `OPTIMIZE` , на это не стоит рассчитывать, так как запрос `OPTIMIZE` приводит к чтению и записи большого объёма данных.
2017-03-12 17:58:51 +00:00
2018-10-19 11:25:22 +00:00
Таким образом, `ReplacingMergeTree` подходит для фоновой чистки дублирующихся данных в целях экономии места, но не даёт гарантии отсутствия дубликатов.
2017-03-12 17:58:51 +00:00
2020-03-20 18:20:59 +00:00
## Создание таблицы {#sozdanie-tablitsy}
2018-10-19 11:25:22 +00:00
2020-03-20 18:20:59 +00:00
``` sql
2018-10-19 11:25:22 +00:00
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = ReplacingMergeTree([ver])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]
2017-10-25 05:27:09 +00:00
```
2017-03-12 17:58:51 +00:00
2018-12-12 17:28:00 +00:00
Описание параметров запроса смотрите в [описании запроса ](../../query_language/create.md ).
2018-10-19 11:25:22 +00:00
**Параметры ReplacingMergeTree**
2020-03-21 04:11:51 +00:00
- `ver` — столбец с версией, тип `UInt*` , `Date` или `DateTime` . Необязательный параметр.
2018-10-19 11:25:22 +00:00
2020-03-21 04:11:51 +00:00
При слиянии, из всех строк с одинаковым значением первичного ключа `ReplacingMergeTree` оставляет только одну:
2018-10-19 11:25:22 +00:00
2020-03-21 04:11:51 +00:00
- Последнюю в выборке, если `ver` не задан.
- С максимальной версией, если `ver` задан.
2018-10-19 11:25:22 +00:00
**Секции запроса**
2018-12-12 17:28:00 +00:00
При создании таблицы `ReplacingMergeTree` используются те же [секции ](mergetree.md ), что и при создании таблицы `MergeTree` .
2018-10-19 11:25:22 +00:00
2020-03-20 18:20:59 +00:00
< details markdown = "1" >
2018-10-19 11:25:22 +00:00
2020-03-20 18:20:59 +00:00
< summary > Устаревший способ создания таблицы< / summary >
!!! attention "Attention"
2018-10-19 11:25:22 +00:00
Н е используйте этот способ в новых проектах и по возможности переведите старые проекты на способ описанный выше.
2020-03-20 18:20:59 +00:00
``` sql
2018-10-19 11:25:22 +00:00
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE [=] ReplacingMergeTree(date-column [, sampling_expression], (primary, key), index_granularity, [ver])
```
2017-03-12 17:58:51 +00:00
2018-10-19 11:25:22 +00:00
В с е параметры, кроме `ver` имеют то же значение, что в и `MergeTree` .
2017-03-12 17:58:51 +00:00
2020-03-21 04:11:51 +00:00
- `ver` — столбец с версией. Необязательный параметр. Описание смотрите выше по тексту.
2020-03-20 18:20:59 +00:00
2018-10-19 11:25:22 +00:00
< / details >
2018-10-16 10:47:17 +00:00
2020-01-30 10:34:55 +00:00
[Оригинальная статья ](https://clickhouse.tech/docs/ru/operations/table_engines/replacingmergetree/ ) <!--hide-->