删除数据

SQL 语句

可以使用 delete 语句从表中删除数据:

DELETE FROM <table> WHERE ...
注:
  • 此方法也可用于删除内存表的数据。
  • 使用 DELETE 语句删除,会首先根据 WHERE 子句过滤,将相关分区的数据加载到内存,然后删除特定数据,再将其余数据写回数据库。为了实现多版本并发控制,会将此版本数据存储在磁盘上的另一个文件。这样可以确保在删除完成前,用户仍可以查询相关数据,且一定是完整的删除前的数据。因此此时磁盘占用可能会高于删除前。当一段时间后旧版本回收删除时,磁盘空间就可以释放。因此使用 DELETE 语句删除分布式表的数据,需要有足够的内存和磁盘空间。如果希望立刻回收旧版本以释放磁盘空间,可以通过函数实现。
  • WHERE 子句的过滤条件应当对分区字段做明确限定,如果没有,则会将所有分区的数据加载到内存处理,容易造成内存资源紧张。

truncate

有三种方式删除分布式表中的数据,分别是 SQL DELETE 语句,truncate 函数 和 dropPartition 函数

何时使用 DELETE
  • 如果要求删除操作不影响正在进行的查询操作,应使用 DELETE。而 truncate 可能会导致其他查询失败。
何时使用 truncate
  • 如果在删除时可用磁盘空间有限,应使用 truncate。而 DELETE 会占用额外磁盘空间。
  • 如果要完全删除整个表的所有数据,应使用 truncate,其性能优于 DELETE
删除一张大表中的部分数据:
  • dropPartitionDELETE 组合使用,从而尽可能小地占用额外磁盘空间。
  • 或者将需要保留的数据取到内存,使用 dropPartition 删除相应分区后,再将保留的数据写回。