Перейти к основному содержимому
Перейти к основному содержимому

Обновление и удаление данных ClickHouse

Хотя ClickHouse предназначен для аналитических нагрузок с высоким объемом данных, в некоторых случаях возможно модифицировать или удалять существующие данные. Эти операции обозначаются как "мутации" и выполняются с помощью команды ALTER TABLE. Вы также можете DELETE строку, используя легковесную возможность удаления ClickHouse.

подсказка

Если вам нужно часто выполнять обновления, рассмотрите возможность использования дедупликации в ClickHouse, которая позволяет вам обновлять и/или удалять строки без генерации события мутации.

Обновление данных

Используйте команду ALTER TABLE...UPDATE, чтобы обновить строки в таблице:

<expression> - это новое значение для столбца, где удовлетворяется <filter_expr>. <expression> должен иметь тот же тип данных, что и столбец, или быть конвертируемым к тому же типу данных с использованием оператора CAST. <filter_expr> должен возвращать значение UInt8 (ноль или не ноль) для каждой строки данных. Несколько операторов UPDATE <column> могут быть объединены в одной команде ALTER TABLE, разделенными запятыми.

Примеры:

  1. Мутация, подобная этой, позволяет обновить visitor_ids, заменив их новыми, используя поиск в словаре:

  2. Модификация нескольких значений в одной команде может быть более эффективной, чем несколько команд:

  3. Мутации могут выполняться ON CLUSTER для шардированных таблиц:

примечание

Невозможно обновить столбцы, которые являются частью первичного ключа или ключа сортировки.

Удаление данных

Используйте команду ALTER TABLE, чтобы удалить строки:

<filter_expr> должен возвращать значение UInt8 для каждой строки данных.

Примеры

  1. Удалить записи, где столбец находится в массиве значений:

  2. Что изменяет этот запрос?

примечание

Чтобы удалить все данные в таблице, более эффективно использовать команду TRUNCATE TABLE [<database>.]<table>. Эта команда также может выполняться ON CLUSTER.

Посмотрите на страницу документации DELETE statement для получения дополнительных деталей.

Легковесные удаления

Еще один вариант для удаления строк - использовать команду DELETE FROM, которая называется легковесным удалением. Удаленные строки немедленно помечаются как удаленные и автоматически фильтруются из всех последующих запросов, поэтому вам не нужно ждать объединения частей или использовать ключевое слово FINAL. Очистка данных происходит асинхронно в фоне.

Например, следующий запрос удаляет все строки из таблицы hits, где столбец Title содержит текст hello:

Несколько примечаний о легковесных удалениях:

  • Эта функция доступна только для семейства движков таблиц MergeTree.
  • Легковесные удаления выполняются асинхронно по умолчанию. Установите mutations_sync равным 1, чтобы дождаться обработки инструкции одной репликой, и установите mutations_sync равным 2, чтобы дождаться обработки всеми репликами.