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

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