Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Обновление и удаление данных ClickHouse

All quickstarts
Хранилище данныхOSS

Хотя ClickHouse ориентирован на аналитические рабочие нагрузки с большими объемами данных, в некоторых случаях существующие данные можно изменять или удалять. Эти операции называются "мутациями" и выполняются с помощью команды ALTER TABLE.

Обновление данных

Используйте команду ALTER TABLE...UPDATE, чтобы обновить строки в таблице:

ALTER TABLE [<database>.]<table> UPDATE <column> = <expression> WHERE <filter_expr>

<expression> — это новое значение столбца для строк, удовлетворяющих условию <filter_expr>. <expression> должен иметь тот же тип данных, что и столбец, или приводиться к нему с помощью оператора CAST. <filter_expr> должен возвращать значение UInt8 (ноль или ненулевое) для каждой строки данных. Несколько операторов UPDATE <column> можно объединить в одной команде ALTER TABLE, разделив их запятыми.

Примеры:

  1. Такая мутация позволяет обновить visitor_id, заменив его новым значением с помощью поиска по словарю:

    ALTER TABLE website.clicks
    UPDATE visitor_id = getDict('visitors', 'new_visitor_id', visitor_id)
    WHERE visit_date < '2022-01-01'
  2. Изменение нескольких значений в одной команде может быть эффективнее, чем выполнение нескольких команд:

    ALTER TABLE website.clicks
    UPDATE url = substring(url, position(url, '://') + 3), visitor_id = new_visit_id
    WHERE visit_date < '2022-01-01'
  3. Мутации можно выполнять с предложением ON CLUSTER для сегментированных таблиц:

    ALTER TABLE clicks ON CLUSTER main_cluster
    UPDATE click_count = click_count / 2
    WHERE visitor_id ILIKE '%robot%'

Удаление данных

Для удаления строк используйте команду ALTER TABLE:

ALTER TABLE [<database>.]<table> DELETE WHERE <filter_expr>

Выражение <filter_expr> должно возвращать значение UInt8 для каждой строки данных.

Примеры

  1. Удалить все записи, в которых значение столбца содержится в массиве значений:

    ALTER TABLE website.clicks DELETE WHERE visitor_id in (253, 1002, 4277)
  2. Что изменяет этот запрос?

    ALTER TABLE clicks ON CLUSTER main_cluster DELETE WHERE visit_date < '2022-01-02 15:00:00' AND page_id = '573'

Подробнее см. на странице документации об операторе DELETE.

Легковесные удаления

Ещё один способ удалять строки — использовать команду DELETE FROM, которая называется легковесным удалением. Удалённые строки сразу помечаются как удалённые и автоматически исключаются из всех последующих запросов, поэтому не нужно ждать слияния частей или использовать ключевое слово FINAL. Очистка данных происходит асинхронно в фоновом режиме.

DELETE FROM [db.]table [ON CLUSTER cluster] [WHERE expr]

Например, следующий запрос удаляет все строки из таблицы hits, в которых столбец Title содержит текст hello:

DELETE FROM hits WHERE Title LIKE '%hello%';

Несколько замечаний о легковесных удалениях:

  • Эта возможность доступна только для семейства движков таблиц MergeTree.
  • По умолчанию легковесные удаления выполняются синхронно: операция ждёт, пока все реплики обработают удаление. Это поведение управляется настройкой lightweight_deletes_sync.
Navigation