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

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