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