Обновление и удаление данных в 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, чтобы дождаться обработки всеми репликами.