Как в clickhouse игнорировать или заменять повторяющиеся данные?

Ссылка скопирована
1 ответ

Доброго дня.
Собственно вопрос прост.
Фрагмент таблицы

...
`id` String,
`install_time` DateTime
)
ENGINE = ReplacingMergeTree
ORDER BY (id, install_time)

запрос на вставку самый простой
INSERT INTO installs (f1,f2) values (v1,v2)

но записи внезапно дублируются.

причём запрос OPTIMIZE TABLE installs DEDUPLICATE;
отрабатывает нормально и дубликаты исчезают.
Неужели каждый раз его прогонять нужно будет?

Или есть способ как научить таблицу пропускать или заменять дубли?

Дополнительно:

Из документации ClickHouse

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

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

В запросе делайте группировку по ключу сортировки, если важно получать данные без дубликатов.

  • Большое спасибо!
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Роман IT Ответ

Для того чтобы игнорировать или заменять повторяющиеся данные в ClickHouse, можно использовать функцию DISTINCT или агрегатные функции в запросе.

Если вы хотите игнорировать повторяющиеся данные и получить только уникальные значения, вы можете использовать функцию DISTINCT. Например, чтобы выбрать уникальные значения из столбца "column_name", выполните следующий запрос:

SELECT DISTINCT column_name FROM table_name;

SELECT DISTINCT column_name FROM table_name;

Этот запрос вернет только уникальные значения из столбца "column_name" и проигнорирует повторяющиеся данные.

Если вы хотите заменить повторяющиеся данные агрегированными значениями, вы можете использовать агрегатные функции, такие как SUM, COUNT, AVG и другие. Например, чтобы заменить повторяющиеся значения в столбце "column_name" на сумму этих значений, выполните следующий запрос:

SELECT column_name, SUM(column_name) FROM table_name GROUP BY column_name;

SELECT column_name, SUM(column_name) FROM table_name GROUP BY column_name;

Этот запрос сгруппирует данные по уникальным значениям в столбце "column_name" и заменит повторяющиеся значения на их сумму.

Таким образом, используя функцию DISTINCT или агрегатные функции в ClickHouse, вы можете игнорировать или заменять повторяющиеся данные в вашем запросе.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно