TRUNCATE TABLE
功能
TRUNCATE TABLE
TRUNCATE TABLE
命令用于快速删除表中的所有记录,但表结构及其属性将保持不变。与
DROP TABLE
DROP TABLE
命令不同,
TRUNCATE TABLE
TRUNCATE TABLE
不会完全删除表,而仅删除表中的数据。
语法
TRUNCATE TABLE [ IF EXISTS ] table_name;
必选参数
table_name
table_name
:指定要清空数据的表名。
可选参数
IF EXISTS
IF EXISTS
:如果指定的表不存在,则不报错并继续执行其他操作。
使用示例
-
清空名为
employees
employees
的表中的所有记录:
TRUNCATE TABLE employees;
-
清空表
employees
employees
,如果表不存在,则不报错:
TRUNCATE TABLE IF EXISTS employees;
TRUNCATE TABLE PARTITION
功能
TRUNCATE TABLE PARTITION
TRUNCATE TABLE PARTITION
命令用于清空分区表中指定分区的数据。支持通过条件筛选方式清空分区数据。如果您希望一次性清空符合某个规则条件的一个或多个分区,可以使用表达式指定筛选条件,通过筛选条件匹配分区并批量清空分区数据。
语法
TRUNCATE TABLE <table_name> PARTITION (<pt_spec>)[, PARTITION (<pt_spec>)....];
TRUNCATE TABLE <table_name> <partition_expression>;
partition_expression::=
PARTITION (<partition_col> <relational_operators> <partition_col_value>)
| PARTITION (scalar(<partition_col>) <relational_operators> <partition_col_value>)
| PARTITION (<partition_filter> AND|OR <partition_filter>)
| PARTITION (NOT <partition_filter>)
| PARTITION (<partition_filter>)[,PARTITION (<partition_filter>), ...]
参数说明
-
table_name
table_name
:指定表的名字。
-
IF EXISTS
IF EXISTS
:如果表不存在,加上此参数执行该命令则不会报错。
-
pt_spec
pt_spec
:必填。待清空数据的分区。当有多个分区字段格式为(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)
。partition_col是分区字段,partition_col_value是分区值。分区字段不区分大小写,分区值区分大小写。支持指定多个分区值,使用逗号分隔。
-
partition_expression
partition_expression
:可以包含以下几种形式:
- 基于分区列的比较操作:
PARTITION (<partition_col> <relational_operators> <partition_col_value>)
<partition_col>
<partition_col>
:分区表中的分区列名。
<relational_operators>
<relational_operators>
:关系运算符,如 =
=
、<、
、
>、<=、
、
>、<>
<>
。
<partition_col_value>
<partition_col_value>
:与分区列进行比较的值。
- 示例如下:
PARTITION (scalar(<partition_col>) <relational_operators> <partition_col_value>)
- 基于分区过滤器的复合条件:
PARTITION (<partition_filter> AND|OR <partition_filter>)
- 基于分区过滤器的否定条件:
PARTITION (NOT <partition_filter>)
- 多个分区过滤器的列表:
PARTITION (<partition_filter>)[,PARTITION (<partition_filter>), ...]
- 允许您列出多个分区过滤条件,每个条件之间用逗号分隔。
使用示例
-
指定分区清空
--从表sale_detail中清空一个分区
TRUNCATE TABLE sale_detail PARTITION (pt = '202402', region = 'beijing');
--从表sale_detail中同时清空两个分区,清空2024年1月杭州和上海地域的销售记录。
TRUNCATE TABLE sale_detail PARTITION (pt = '201401', region = 'hangzhou'),
PARTITION (pt = '201401', region = 'shanghai');
-
使用过滤条件清空
sales
sales
表中满足分区条件 year < 2024 AND quarter = 1
year < 2024 AND quarter = 1
的所有分区:
TRUNCATE TABLE sales PARTITION
(
YEAR < 2024 AND
QUARTER = 1
);