数据删除
所有文档
menu
没有找到结果,请重新输入

PALO

数据删除

Doris 中的数据删除有以下几种方式:

  • TRUNCATE,该命令用于直接清空表或分区,但不会删除对应的元数据。操作代价较低,再有清空数据需求时,建议使用。
  • DROP,删除表或分区,会同时删除数据和元数据。
  • DELETE,Delete 语句用于按条件删除数据,具体说明见本文档按条件删除一节。
  • MARK DELETE,Mark Delete 功能对数据进行按行删除,具体说明见本文档标记删除一节。

本文档主要介绍 DELETE 和 BATCH DELETE 两种方式,其他方式可参阅对应的命令文档。

按条件删除

使用 DELETE 命令可以按条件删除数据。具体说明请参阅 DELETE 命令文档。下面通过示例说明:

DELETE FROM example_table WHERE event_day < 20201001 AND event_key != 1000;

DELETE FROM example_table PARTITION p202010 WHERE event_key in (1000, 1001, 1002, 1003); 

DELETE 命令是一个同步命令,返回成功即代表删除成功。

用户可以通过以下命令查看历史的 DELETE 操作记录:

mysql> SHOW DELETE FROM example_db;
+-----------+---------------+---------------------+-----------------+----------+
| TableName | PartitionName | CreateTime          | DeleteCondition | State    |
+-----------+---------------+---------------------+-----------------+----------+
| empty_tbl | p3            | 2020-04-15 23:09:35 | k1 EQ "1"       | FINISHED |
| test_tbl  | p4            | 2020-04-15 23:09:53 | k1 GT "80"      | FINISHED |
+-----------+---------------+---------------------+-----------------+----------+
2 rows in set (0.00 sec)

具体说明,可参阅 SHOW DELETE 命令文档。

注意事项

  • DELETE 命令不适用于高频的删除操作,比如短时间内发送大量的 DELETE 命令,会严重影响底层数据合并效率以及查询效率。因为DELETE 操作本质上是存储了一个删除条件,在查询时会对每一行记录应用这个删除条件做过滤,因此当有大量删除条件时,查询效率就会降低。
  • 尽量避免使用 DELETE-LOAD-DELETE-LOAD 这种交替执行的使用模式,这种模式对底层的数据合并策略非常不友好,可能会导致大量的数据未合并,导致积压。

标记删除

标记删除功能主要用于解决一些需要实时更新同步的场景。比如 同步MySQL的Binlog 数据。该方式只能应用于 UNIQUE KEY 模型的表上。具体说明,请参阅 MARK DELETE 文档。

数据更新标记删除