数据删除

          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 文档。

          上一篇
          数据更新
          下一篇
          标记删除