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