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

Операция TRUNCATE

TRUNCATE за одну операцию очищает все данные указанной таблицы или раздела, сохраняя только структуру таблицы и определение раздела. В отличие от DELETE, эта операция не создаёт версий удаления и поэтому не влияет на производительность последующих запросов. Это делает её предпочтительным выбором для очистки больших объёмов данных.

Быстрая навигация​

Когда выбирать TRUNCATE​

TRUNCATE подходит для сценариев, в которых требуется очистить большой объём данных за одну операцию:

  • Сброс тестовой среды: Очистка тестовых данных перед повторной загрузкой.
  • Пересоздание данных разделов: Очистка указанных разделов с последующей записью исправленных данных.
  • Очистка больших объёмов данных: В отличие от DELETE, версии не накапливаются и производительность запросов не снижается.
  • Очистка после архивирования исторических данных: Очистка исходной таблицы или раздела после завершения архивирования.

Синтаксис и параметры​

Формат команды​

TRUNCATE TABLE [db.]tbl [PARTITION(p1, p2, ...)] [FORCE];

Описание параметров​

ПараметрОбязательныйОписание
db.НетИмя базы данных. Если не указано, используется текущая база данных.
tblДаИмя таблицы, данные которой нужно очистить.
PARTITION(..)НетЗадаёт список имён разделов; очищаются только эти разделы. Если не указан, очищается вся таблица.
FORCEНетСразу физически удаляет данные. Восстановление с помощью RECOVER невозможно. Используйте с осторожностью.

Примеры использования​

1. Очистка всей таблицы​

Очистить все данные таблицы tbl в базе данных example_db:

TRUNCATE TABLE example_db.tbl;

2. Очистка указанных разделов​

Очистить только разделы p1 и p2 таблицы tbl:

TRUNCATE TABLE tbl PARTITION(p1, p2);

3. Принудительная очистка без возможности восстановления​

Сразу физически удалить данные example_db.tbl, минуя корзину:

TRUNCATE TABLE example_db.tbl FORCE;
предупреждение

После использования FORCE данные нельзя восстановить с помощью RECOVER. Убедитесь в правильности операции перед выполнением.

Ограничения использования​

Перед выполнением TRUNCATE убедитесь, что учтены следующие условия:

  • Очищаются только данные, структура сохраняется: Структура таблицы и определения разделов сохраняются; очищаются только данные.
  • Условия фильтрации не поддерживаются: Можно очистить только всю таблицу или указанные разделы. Добавлять условия WHERE нельзя.
  • Таблица должна находиться в состоянии NORMAL: Нельзя очистить таблицу, для которой выполняется SCHEMA CHANGE.
  • Влияние на текущие загрузки: Операция может привести к сбою выполняющихся заданий загрузки. Выполняйте её в периоды, когда загрузка не ведётся.
  • По умолчанию данные можно восстановить: Если FORCE не используется, данные можно восстановить в течение срока хранения с помощью RECOVER.

Восстановление данных​

При выполнении TRUNCATE без FORCE очищенные данные попадают в корзину и могут быть восстановлены в течение срока хранения:

RECOVER TABLE [db_name.]table_name;

Подробнее см. в описании оператора RECOVER.

подсказка

Срок хранения данных в корзине задаётся параметром конфигурации FE catalog_trash_expire_second. По истечении этого срока данные удаляются безвозвратно.

Сравнение TRUNCATE и DELETE​

Обе операции позволяют удалять данные, но сценарии их применения существенно различаются:

Критерий сравненияTRUNCATEDELETE
Гранулярность удаленияВся таблица или весь разделОтдельные строки с необязательными условиями WHERE
Поддержка фильтрацииНетДа
Влияние на производительность запросовОтсутствуетСоздаёт версии удаления, что влияет на производительность запросов
Скорость выполненияОчень высокая (операция на уровне метаданных)Зависит от числа строк, соответствующих условию
Возможность восстановления по умолчаниюВосстановление с помощью RECOVER (без FORCE)Непосредственное восстановление невозможно
Типичные сценарииОчистка больших объёмов данных, пересоздание данных разделовТочное удаление небольших объёмов данных

Рекомендации по выбору:

  • Для очистки всей таблицы или всего раздела предпочтительнее TRUNCATE.
  • Для удаления части данных по условиям используйте DELETE.

Часто задаваемые вопросы​

Удаляет ли TRUNCATE структуру таблицы?​

Нет. TRUNCATE очищает только данные. Структура таблицы, определения разделов, индексы и другие метаданные сохраняются.

Можно ли восстановить данные после TRUNCATE?​

  • Без FORCE: Данные можно восстановить с помощью RECOVER в течение срока хранения.
  • С FORCE: Данные физически удаляются без возможности восстановления.

Можно ли выполнить TRUNCATE, пока для таблицы выполняется SCHEMA CHANGE?​

Нет. Таблица должна находиться в состоянии NORMAL; в противном случае команда завершится с ошибкой. Перед выполнением дождитесь завершения SCHEMA CHANGE.

Влияет ли TRUNCATE на выполняющиеся задания загрузки?​

Операция может привести к сбою выполняющихся заданий загрузки. Выполняйте её в периоды, когда загрузка не ведётся, или предварительно приостановите соответствующие загрузки.

В чём разница между TRUNCATE и DROP TABLE?​

  • TRUNCATE: Сохраняет структуру таблицы и очищает только данные.
  • DROP TABLE: Удаляет саму таблицу, включая её структуру и данные.

Можно ли очистить только часть данных в разделе?​

Нет. TRUNCATE может очистить только всю таблицу или указанные разделы; фильтрация на уровне строк не поддерживается. Для удаления по условию используйте DELETE.