DELETE
该语句用于从表中删除数据行。表可以是分区表或者非分区表。
对于明细表、聚合表,以及更新表,支持删除表中指定分区的数据。从 2.3 版本开始,主键表支持完整的 DELETE...WHERE 语义,即支持按主键、任意列、以及子查询结果删除数据。从 3.0 版本开始,主键类型表丰富了 DELETE...WHERE 语义,支持使用多表关联和公用表表达式(CTE)。
注意事项
- 执行 DELETE 操作需要有对应表的 DELETE 权限。
- 不建议您执行高频的 DELETE 操作。如需要,请在业务低峰期进行。
- DELETE 删除的是表中数据,表依然存在。如果要删除表,参见 DROP TABLE。
- 为防止误删整表,必须在 DELETE 语句中指定 WHERE 子句。
- 删除的数据会标记为“Deleted”,暂时保留在 Segment 中,不会立即进行物理删除。Compaction(数据版本合并)完成之后会被回收。
- 该操作会同时删除和表相关的物化视图的数据。
- 您可以使用系统变量
insert_timeout来设置 DELETE 操作的超时时间。
DELETE 与明细类型、聚合类型和更新类型表
语法
DELETE FROM [<db_name>.]<table_name> [PARTITION <partition_name>]
WHERE
column_name1 op { value | value_list } [ AND column_name2 op { value | value_list } ...]
参数说明
| 参数 | 必选 | 描述 |
|---|---|---|
db_name | No | 要操作的表所在的数据库。如果不指定,默认为当前数据库。 |
table_name | Yes | 要操作的表名。 |
partition_name | No | 要操作的分区名。 |
column_name | Yes | 作为删除条件的列,可以指定一个或多个列。 |
op | Yes | 指定的算子。支持 =、>、<、>=、<=、!=、IN 和 NOT IN。 |
使用限制
- 聚合类型和更新类型表仅支持 Key 列作为删除条件。明细类型表支持任意列作为删除条件。
- 条件之间只能是“AND”关系。若希望达成“OR”的关系,需要将条件分别写在两个 DELETE 语句中。
- 明细类型、聚合类型和更新表类型下,DELETE 语句目前不支持以子查询结果作为删除条件。
影响
执行 DELETE 语句后,可能会导致接下来一段时间内(Compaction 完成之前)的查询效率降低。影响程度取决于语句中指定的删除条件的数量。指定的条件越多,影响越大。