截断表
描述
TRUNCATE TABLE
语句会从表或分区中移除所有行。表不能是视图或外部/临时表。为了同时截断多个分区,用户可以在
partition_spec
中指定分区。如果没有指定
partition_spec
,则会移除表中的所有分区。
如果表被缓存,命令将清除表及其所有依赖项的缓存数据。下次访问表或依赖项时,缓存将被延迟填充。
语法
TRUNCATE TABLE table_identifier [ partition_spec ]
参数
-
table_identifier
指定一个表名,可以选择性地加上数据库名。
语法:
[ database_name. ] table_name
-
partition_spec
一个可选参数,指定一个由逗号分隔的键和值对的列表,用于分区。
语法:
PARTITION ( partition_col_name = partition_col_val [ , ... ] )
示例
-- 创建分区表 Student
CREATE TABLE Student (name STRING, rollno INT) PARTITIONED BY (age INT);
SELECT * FROM Student;
+----+------+---+
|name|rollno|age|
+----+------+---+
| ABC| 1| 10|
| DEF| 2| 10|
| XYZ| 3| 12|
+----+------+---+
-- 从指定分区中删除表中的所有行
TRUNCATE TABLE Student partition(age=10);
-- 执行截断后,属于分区 age=10 的记录被删除
SELECT * FROM Student;
+----+------+---+
|name|rollno|age|
+----+------+---+
| XYZ| 3| 12|
+----+------+---+
-- 从所有分区中删除表中的所有行
TRUNCATE TABLE Student;
SELECT * FROM Student;
+----+------+---+
|name|rollno|age|
+----+------+---+
+----+------+---+