Обновление и удаление данных ClickHouse
Хотя ClickHouse предназначен для аналитических нагрузок с высоким объемом данных, в некоторых случаях возможно модифицировать или удалять существующие данные. Эти операции обозначаются как "мутации" и выполняются с помощью команды ALTER TABLE
. Вы также можете DELETE
строку, используя легковесную возможность удаления ClickHouse.
Если вам нужно часто выполнять обновления, рассмотрите возможность использования дедупликации в ClickHouse, которая позволяет вам обновлять и/или удалять строки без генерации события мутации.
Обновление данных
Используйте команду ALTER TABLE...UPDATE
, чтобы обновить строки в таблице:
<expression>
- это новое значение для столбца, где удовлетворяется <filter_expr>
. <expression>
должен иметь тот же тип данных, что и столбец, или быть конвертируемым к тому же типу данных с использованием оператора CAST
. <filter_expr>
должен возвращать значение UInt8
(ноль или не ноль) для каждой строки данных. Несколько операторов UPDATE <column>
могут быть объединены в одной команде ALTER TABLE
, разделенными запятыми.
Примеры:
-
Мутация, подобная этой, позволяет обновить
visitor_ids
, заменив их новыми, используя поиск в словаре: -
Модификация нескольких значений в одной команде может быть более эффективной, чем несколько команд:
-
Мутации могут выполняться
ON CLUSTER
для шардированных таблиц:
Невозможно обновить столбцы, которые являются частью первичного ключа или ключа сортировки.
Удаление данных
Используйте команду ALTER TABLE
, чтобы удалить строки:
<filter_expr>
должен возвращать значение UInt8 для каждой строки данных.
Примеры
-
Удалить записи, где столбец находится в массиве значений:
-
Что изменяет этот запрос?
Чтобы удалить все данные в таблице, более эффективно использовать команду TRUNCATE TABLE [<database>.]<table>
. Эта команда также может выполняться ON CLUSTER
.
Посмотрите на страницу документации DELETE
statement для получения дополнительных деталей.
Легковесные удаления
Еще один вариант для удаления строк - использовать команду DELETE FROM
, которая называется легковесным удалением. Удаленные строки немедленно помечаются как удаленные и автоматически фильтруются из всех последующих запросов, поэтому вам не нужно ждать объединения частей или использовать ключевое слово FINAL
. Очистка данных происходит асинхронно в фоне.
Например, следующий запрос удаляет все строки из таблицы hits
, где столбец Title
содержит текст hello
:
Несколько примечаний о легковесных удалениях:
- Эта функция доступна только для семейства движков таблиц
MergeTree
. - Легковесные удаления выполняются асинхронно по умолчанию. Установите
mutations_sync
равным 1, чтобы дождаться обработки инструкции одной репликой, и установитеmutations_sync
равным 2, чтобы дождаться обработки всеми репликами.