SmartQuery /ВОПРОС → ПРИМЕР → ПОНЯТНЫЙ ОТВЕТ
Базы данных

ClickHouse: удалить строки по условию

Для удаления выбранных строк в таблицах семейства MergeTree используется DELETE FROM … WHERE. Сначала проверьте тем же условием, какие строки попадут под удаление. USE выбирает базу данных, а не таблицу: таблицу удобнее указать полным именем.

Проверить таблицу и условие

SELECT version();
SHOW CREATE TABLE analytics.events;
SELECT count()
FROM analytics.events
WHERE status = 'inactive';

SELECT *
FROM analytics.events
WHERE status = 'inactive'
LIMIT 20;

Здесь analytics.events — пример имени уже существующей таблицы, а status — её столбец. Подставляйте свои имена только после проверки схемы. Счётчик и выборка нужны до удаления; одна лишь строка «запрос выполнен» не подтверждает правильность условия.

Удалить выбранные строки

DELETE FROM analytics.events
WHERE status = 'inactive';

Это lightweight delete. Поддержка зависит от движка, версии и особенностей таблицы, включая projections. Строки сначала помечаются удалёнными; физическое освобождение места происходит при последующих слияниях. Настройки синхронности влияют на момент завершения команды, поэтому повторный SELECT проверяйте после завершения соответствующей операции.

Очистить всю таблицу — отдельная задача

TRUNCATE TABLE analytics.events;

TRUNCATE удаляет всё содержимое, сохраняя саму таблицу. Не используйте его вместо ошибочного WHERE. Перед любой командой удаления нужны проверенная резервная копия или иной план восстановления; обычного отката транзакции для этих действий здесь не предполагается.

Проверить результат и нагрузку

  • Повторите SELECT count() с исходным условием и проверьте несколько строк, которые должны были остаться.
  • Для больших объёмов оцените нагрузку на тестовой копии: удаление может влиять на запросы и очередь mutations.
  • Не заменяйте DELETE на ALTER TABLE … DELETE автоматически: это более тяжёлая операция с иными затратами.
  • Ноль видимых строк не означает, что данные уже исчезли из всех файлов, реплик и резервных копий.

Документация