Обзор удаления
В ClickHouse существует несколько способов удаления данных, каждый из которых имеет свои преимущества и характеристики производительности. Вы должны выбрать соответствующий метод в зависимости от вашей модели данных и объема данных, которые вы намерены удалить.
Метод | Синтаксис | Когда использовать |
---|---|---|
Легковесное удаление | DELETE FROM [table] | Используйте при удалении небольших объемов данных. Строки сразу отфильтровываются из всех последующих запросов SELECT , но изначально просто помечаются как удаленные, а не удаляются с диска. |
Удаление мутаций | ALTER TABLE [table] DELETE | Используйте, когда данные должны быть немедленно удалены с диска (например, для соблюдения норм). Отрицательно влияет на производительность SELECT . |
Ограничение таблицы | TRUNCATE TABLE [db.table] | Эффективно удаляет все данные из таблицы. |
Удалить партицию | DROP PARTITION | Эффективно удаляет все данные из партиции. |
Вот краткий обзор различных способов удаления данных в ClickHouse:
Легковесные удаления
Легковесные удаления вызывают немедленное помечание строк как удаленных, таким образом они могут автоматически фильтроваться из всех последующих запросов SELECT
. Последующее удаление этих удаленных строк происходит во время естественных циклов слияния и, следовательно, требует меньшего ввода-вывода. В результате возможно, что в течение неопределенного периода данные фактически не удаляются из хранилища, а просто помечаются как удаленные. Если вам необходимо гарантировать, что данные удалены, рассмотрите вышеуказанную команду мутации.
Удаление больших объемов данных с помощью легковесной команды DELETE
также может негативно влиять на производительность запросов SELECT
. Команда также несовместима с таблицами, имеющими проекции.
Обратите внимание, что в операции используется мутация для пометки удаленных строк (добавление столбца _row_exists
), что также влечет за собой некоторый ввод-вывод.
В общем, легковесные удаления следует предпочитать мутациям, если допустимо существование удаленных данных на диске (например, в случаях, не требующих соблюдения норм). Этот подход по-прежнему следует избегать, если необходимо удалить все данные.
Узнайте больше о легковесных удалениях.
Удаления мутаций
Удаления мутаций могут быть выполнены через команду ALTER TABLE ... DELETE
, например
Эти команды могут выполняться как синхронно (по умолчанию, если не реплицированы), так и асинхронно (в зависимости от настройки mutations_sync). Эти операции требуют много ввода-вывода, переписывая все части, которые соответствуют выражению WHERE
. Процесс не имеет атомарности - части заменяются на мутированные части сразу же, как только они готовы, а запрос SELECT
, который начинает выполняться во время мутации, увидит данные из частей, которые уже были мутированы, вместе с данными из частей, которые еще не были мутированы. Пользователи могут отслеживать состояние прогресса через таблицу systems.mutations. Это интенсивные операции ввода-вывода и их следует использовать экономно, так как они могут повлиять на производительность SELECT
в кластере.
Узнайте больше о удалениях мутаций.
Ограничение таблицы
Если все данные в таблице необходимо удалить, используйте команду TRUNCATE TABLE
, показанную ниже. Это легкая операция.
Узнайте больше о TRUNCATE TABLE.
Удалить партицию
Если вы указали собственный ключ партиционирования для ваших данных, партиции могут быть эффективно удалены. Избегайте партиционирования с высокой кардинальностью.
Узнайте больше о DROP PARTITION.