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