Операция TRUNCATE
TRUNCATE за одну операцию очищает все данные указанной таблицы или раздела, сохраняя только структуру таблицы и определение раздела. В отличие от DELETE, эта операция не создаёт версий удаления и поэтому не влияет на производительность последующих запросов. Это делает её предпочтительным выбором для очистки больших объёмов данных.
Быстрая навигация
- Когда выбирать 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
Обе операции позволяют удалять данные, но сценарии их применения существенно различаются:
| Критерий сравнения | TRUNCATE | DELETE |
|---|---|---|
| Гранулярность удаления | Вся таблица или весь раздел | Отдельные строки с необязательными условиями 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.
Связанные документы
- Оператор RECOVER: Восстановление очищенных данных.
- Операция DELETE: Удаление данных по условиям.