什么是删除向量?

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

Databricks 建议使用 Databricks Runtime 14.3 LTS 及更高版本编写包含删除向量的表,以利用所有优化措施。 可以在 Databricks Runtime 12.2 LTS 及更高版本中读取启用了删除矢量的表。

在 Databricks Runtime 14.2 及更高版本中,包含删除矢量的表支持行级并发。 查看使用行级别并发写入冲突

注意

Photon 利用删除向量进行预测性 I/O 更新,加速 DELETEMERGEUPDATE 操作。 所有支持读取删除向量的客户端都可以读取生成了删除向量的更新,无论这些更新是否由预测性 I/O 生成。 请参阅使用预测性 I/O 加快更新速度

启用删除向量

使用 SQL 仓库或 Databricks Runtime 14.1 或更高版本创建新表时,默认会启用删除矢量。

重要

工作区管理设置控制是否为新的 Delta 表自动启用删除向量。

可以通过设置一个 Delta 表属性来启用对 Delta Lake 表的删除矢量的支持。 在创建或更改现有表的期间启用删除向量,如以下示例所示:

CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);

警告

启用删除向量时,表协议会升级。 升级后,不支持删除向量的 Delta Lake 客户端无法读取该表。 请参阅 Azure Databricks 如何管理 Delta Lake 功能兼容性?

在 Databricks Runtime 14.1 及更高版本中,你可以将删除向量表功能删除以实现与其他 Delta 客户端的兼容性。 请参阅删除 Delta 表功能

将更改应用于 Parquet 数据文件

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

  • 对表运行 OPTIMIZE 命令。
  • 自动压缩会触发使用删除向量重写数据文件的操作。
  • 对表运行 REORG TABLE ... APPLY (PURGE)

与文件压缩相关的事件不能严格保证会解析删除向量中记录的更改,如果目标数据文件不是文件压缩的候选项,则可能不会应用删除向量中记录的某些更改。 REORG TABLE ... APPLY (PURGE) 重写所有包含记录以及使用删除向量记录的修改的数据文件。 请参阅 REORG TABLE

注意

修改的数据可能仍然存在于旧文件中。 可以运行 VACUUM 以物理方式删除旧文件。 REORG TABLE ... APPLY (PURGE) 在完成时会创建表的新版本,必须为保留阈值考虑此完成时间的时间戳,使 VACUUM 操作完全移除已删除的文件。 请参阅使用 vacuum 删除未使用的数据文件

与 Delta 客户端的兼容性

Azure Databricks 利用删除向量为已启用 Photon 的计算更新提供预测 I/O 支持。 请参阅使用预测性 I/O 加快更新速度

对读取和写入的删除向量的利用的支持因客户端而异。

下表表示读取和写入启用了删除向量的 Delta 表所需的客户端版本,并指定哪些写入操作利用删除向量:

客户端 写入删除向量 读取删除向量
带有 Photon 的 Databricks Runtime 支持使用 Databricks Runtime 12.2 LTS 及更高版本的 MERGEUPDATEDELETE 需要 Databricks Runtime 12.2 LTS 或更高版本。
没有 Photon 的 Databricks Runtime 支持使用 Databricks Runtime 12.2 LTS 及更高版本的 DELETE。 支持运行 Databricks Runtime 14.1 及更高版本的 UPDATE。 支持使用 Databricks Runtime 14.3 LTS 及更高版本运行 MERGE 需要 Databricks Runtime 12.2 LTS 或更高版本。
搭配使用 OSS Delta Lake 和 OSS Apache Spark 支持使用 OSS Delta 2.4.0 及更高版本的 DELETE。 支持使用 OSS Delta 3.0.0 及更高版本的 UPDATE 需要 OSS Delta 2.3.0 或更高版本。
Delta 共享收件人 Delta Sharing 表不支持写入 Databricks:需要 DBR 14.1 或更高版本。 开源 Apache Spark:需要 delta-sharing-spark 3.1 或更高版本。

注意

有关其他 Delta 客户端的支持,请参阅 OSS Delta Lake 集成文档

限制

  • UniForm 不支持删除向量。

  • 无法为存在删除向量的表生成清单文件。 若要生成清单,请运行 REORG TABLE ... APPLY (PURGE) 并确保没有任何并发写入操作正在运行。

  • 无法为启用了删除向量的表以增量方式生成清单文件。