截断表
截断操作可以删除表或数据库中的数据,同时保留表或数据库本身的存在。这是一种轻量级且不可逆的操作。
TRUNCATE 语句
ClickHouse 中的 TRUNCATE 语句用于在保留表或数据库结构的前提下,快速删除其中的所有数据。
TRUNCATE TABLE
| 参数 | 描述 |
|---|---|
IF EXISTS | 如果表不存在,则避免报错。若省略此参数,则查询会返回错误。 |
db.name | 可选的数据库名称。 |
ON CLUSTER cluster | 在指定的集群上执行该命令。 |
SYNC | 在使用复制表时,使截断操作在各个副本之间同步进行。若省略,则截断操作默认以异步方式执行。 |
你可以使用 alter_sync 设置在副本上等待操作执行的行为。
你可以通过 replication_wait_for_inactive_replica_timeout 设置指定在非活动副本上等待其执行 TRUNCATE 查询的时间(以秒为单位)。
注意
如果 alter_sync 被设置为 2,并且某些副本处于非活动状态的持续时间超过 replication_wait_for_inactive_replica_timeout 设置指定的时间,则会抛出 UNFINISHED 异常。
对于以下表引擎,不支持 TRUNCATE TABLE 查询:
清空所有表
| Parameter | Description |
|---|---|
ALL | 从数据库中的所有表中删除数据。 |
IF EXISTS | 如果数据库不存在,则避免报错。 |
db | 数据库名称。 |
LIKE | ILIKE | NOT LIKE '<pattern>' | 根据模式过滤表。 |
ON CLUSTER cluster | 在整个集群上运行该命令。 |
从数据库中的所有表中删除所有数据。
TRUNCATE DATABASE 语句
| 参数 | 描述 |
|---|---|
IF EXISTS | 如果数据库不存在,则避免报错。 |
db | 数据库名称。 |
ON CLUSTER cluster | 在指定的集群上执行该命令。 |
从数据库中删除所有表,但保留数据库本身。省略 IF EXISTS 子句时,如果数据库不存在,该查询会返回错误。
注意
TRUNCATE DATABASE 不支持 Replicated 类型的数据库。应改为先 DROP 再 CREATE 该数据库。