Удаляем дубли в ClickHouse без ReplacingMergeTree У меня была задачка настроить создание табличек через фреймворк. И вот настал момент - локально все работает, доступ к кх я получила, джобку доделана. Пора тестить! 💻 Сначала я решила покрутить запросы ручками, проверить права на создание табличек, все ли работает. Создаю на движке MergeTree, пишу данные - все ок. Перехожу к ReplicatedMergeTree - создаю табличку, вставляю пару строк данных, делаю select... ``` CREATE TABLE db.test_table_local ON CLUSTER '{cluster}' ( `id` UInt32, `name` String ) ENGINE = ReplicatedMergeTree ORDER BY id; INSERT INTO db.test_table_local VALUES (1, 'test'); INSERT INTO db.test_table_local VALUES (1, 'test'); SELECT * FROM db.test_table_local; ``` Нет, что-то не то. Я вставила 2 строки, но вижу одну. Почему? В табличке всего 2 поля, что пошло не так? 😑 Иду искать проблему. Попробовала вставить еще раз и еще раз, посмотрела в system.parts на незавершенные мутации, сделала SYSTEM SYNC REPLICA, но ничего не помогло Потом я поняла, что удаляются дубликаты для записей с одним первичным ключом. Но в кх же нет такой строгости? Что-то не сходится Нахожу в доке по кх: ``` Для движков *ReplicatedMergeTree дедупликация вставок включена по умолчанию и управляется настройками replicated_deduplication_window и replicated_deduplication_window_seconds. Для нереплицируемых движков *MergeTree дедупликация управляется настройкой non_replicated_deduplication_window.``` Иду в табличку смотреть эти настройки: ``` SELECT * FROM system.merge_tree_settings WHERE name LIKE '%deduplicat%';``` Из основных настроек вижу: 📌non_replicated_deduplication_window = 0, поэтому в MergeTree данные вставляются как обычно 📌replicated_deduplication_window != 0, дубликаты не вставляются, они проверяются по хэш-суммам для определенного количества свежих блоков (по дефолту 10к), хэши лежат в Zookeeper 📌replicated_deduplication_window_seconds - сколько секунд хранятся эти хэш-суммы (по дефолту 3600с = 1ч) Я со своей задублированной строкой попала сразу в 2 настройки. До этого не замечала такого поведения в кх, хотя это дефолтное🤷‍♂️ Зато узнала про существование таблицы system.merge_tree_settings @data_engineerette