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

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