跳到内容

什么是删除向量?

删除向量是一种存储优化功能,可以在 Delta Lake 表上启用。默认情况下,当数据文件中的单行被删除时,必须重写包含该记录的整个 Parquet 文件。对于启用了删除向量的表,某些 Delta 操作使用删除向量将现有行标记为已删除,而无需重写 Parquet 文件。对表的后续读取通过将删除向量记录的删除应用到最新表版本来解析当前表状态。

对删除向量的支持随着每个 Delta Lake 版本的发布而逐步增加。下表描述了每个 Delta Lake 版本支持的操作。

Operation首个可用 Delta Lake 版本自 Delta Lake 版本起默认启用
SCAN2.3.02.3.0
DELETE2.4.02.4.0
UPDATE3.0.03.1.0
MERGE3.1.03.1.0

您可以通过设置 Delta Lake 表属性来启用 Delta Lake 表对删除向量的支持。

ALTER TABLE <table_name> SET TBLPROPERTIES('delta.enableDeletionVectors' = true);

删除向量将对行的更改表示为软删除,这些软删除逻辑上修改了 Delta Lake 表中现有的 Parquet 数据文件。这些更改在数据文件被重写时物理应用,由以下事件之一触发:

  • 在表上运行禁用删除向量的 DML 命令(通过命令标志或表属性)。
  • 在表上运行 OPTIMIZE 命令。
  • 对表运行 REORG TABLE ... APPLY (PURGE)

UPDATEMERGEOPTIMIZE 没有严格保证解决删除向量中记录的更改,如果目标数据文件不包含更新的记录,或者不符合文件压缩的条件,则删除向量中记录的某些更改可能不会应用。REORG TABLE ... APPLY (PURGE) 重写所有包含使用删除向量记录的修改的记录的数据文件。请参阅通过 REORG TABLE 应用更改

通过使用 REORG TABLE 重写文件以清除软删除数据(例如由删除向量标记为已删除的行)来重组 Delta Lake 表

REORG TABLE events APPLY (PURGE);
-- If you have a large amount of data and only want to purge a subset of it, you can specify an optional partition predicate using `WHERE`:
REORG TABLE events WHERE date >= '2022-01-01' APPLY (PURGE);
REORG TABLE events
WHERE date >= current_timestamp() - INTERVAL '1' DAY
APPLY (PURGE);