Обновление и удаление данных ClickHouse с помощью мутаций
Хотя ClickHouse ориентирован на аналитические нагрузки с большим объемом данных, в некоторых ситуациях можно изменять
или удалять уже существующие данные. Эти операции называются «мутациями» и выполняются с помощью команды ALTER TABLE.
Если вам часто требуется обновлять данные, рассмотрите использование механизма deduplication в ClickHouse, который позволяет обновлять и/или удалять строки без выполнения мутаций. В качестве альтернативы используйте lightweight updates или lightweight deletes
Обновление данных
Используйте команду 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 для получения дополнительных сведений.
Легковесные удаления
Другой вариант удаления строк — использование команды DELETE FROM, которая называется легковесным удалением. Удалённые строки помечаются как удалённые немедленно и будут автоматически исключаться из всех последующих запросов, поэтому вам не нужно ждать слияния частей или использовать ключевое слово FINAL. Очистка данных выполняется асинхронно в фоновом режиме.
Например, следующий запрос удаляет все строки таблицы hits, в которых столбец Title содержит текст hello:
Несколько замечаний о легковесных удалениях:
- Эта функция доступна только для семейства движков таблиц
MergeTree. - Легковесные удаления по умолчанию выполняются синхронно, ожидая, пока все реплики обработают операцию удаления. Поведение задаётся настройкой
lightweight_deletes_sync.