Обновление и удаление данных ClickHouse с помощью мутаций
Хотя ClickHouse предназначен для аналитических нагрузок с высоким объемом данных, в некоторых ситуациях возможно изменять или удалять существующие данные. Эти операции обозначаются как "мутации" и выполняются с помощью команды ALTER TABLE.
Если вам нужно часто обновлять данные, рассмотрите возможность использования дедупликации в 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, чтобы дождаться обработки всех реплик.