Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
删除向量是一项存储优化功能,可加速对表的修改。 默认情况下,删除单个行需要重写包含该记录的整个 Parquet 文件。 删除向量可避免这种开销。 启用删除向量时,DELETE、UPDATE 和 MERGE 操作会将行标记为已修改,而无需重写 Parquet 文件。 首先读取当前表状态,然后通过应用删除向量所记录的修改来解析该状态。
Databricks 建议使用 Databricks Runtime 14.3 LTS 及更高版本编写包含删除矢量的表,以使用所有优化。 若要读取启用了删除矢量的表,请使用 Databricks Runtime 12.2 LTS 及更高版本。
在 Databricks Runtime 14.2 及更高版本中,包含删除矢量的表支持行级并发。 请参阅 行级并发。
注意
对于预测 I/O 更新,Photon 使用删除矢量来加速DELETE、MERGE和UPDATE操作。 请参阅使用预测性 I/O 加快更新速度。
启用删除向量
在工作区设置中,当使用 SQL 数据仓库或 Databricks Runtime 14.3 LTS 或更高版本时,可以在新表上启用删除向量。
在默认情况下,Hive 元存储中存储的物化视图和流式处理表不会启用删除向量。
若要在任何表或视图(包括流式处理表和具体化视图)上手动启用或禁用对删除向量的支持,请使用 enableDeletionVectors 表属性。 若要在创建或更改表时对表启用删除矢量,
-- For Delta tables
CREATE TABLE <table-name> [options] TBLPROPERTIES ('delta.enableDeletionVectors' = true);
ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.enableDeletionVectors' = true);
不能使用 ALTER 语句在具体化视图或流式处理表上启用或禁用删除向量。
对于 Iceberg 表,请使用 iceberg.enableDeletionVectors 而不是 delta.enableDeletionVectors。
警告
启用删除向量时,Databricks 将升级表协议。 升级后,没有删除向量支持的客户端无法读取表。 请参阅 Delta Lake 功能兼容性和协议。
在 Databricks Runtime 14.1 及更高版本中,可以删除向量表功能以实现与其他客户端的兼容性。 请参阅删除 Delta Lake 表功能并降级表协议。
将更改应用于 Parquet 数据文件
删除向量用于指示在逻辑上以软删除方式修改表中现有 Parquet 数据文件时对行所做的更改。 当以下事件之一导致数据文件被重写时,这些更改将以物理方式应用:
- 对表运行
OPTIMIZE命令。 - 自动压缩会触发使用删除向量重写数据文件的操作。
- 在表上执行
REORG TABLE ... APPLY (PURGE)。
与文件压缩相关的事件无法严格保证解决删除向量中记录的更改。 如果目标数据文件不是文件压缩的候选项,则删除向量中记录的某些更改可能不会以物理方式应用。
REORG TABLE ... APPLY (PURGE) 重写所有包含使用删除向量记录的修改的记录的数据文件。 请参阅 REORG TABLE。
以物理方式删除旧数据
清除操作后,表的旧数据文件中仍可能存在已修改的数据。 例如,你可能想要以物理方式删除数据,以降低云提供商的存储成本或符合 GDPR 请求。
运行 VACUUM 以物理方式删除旧文件。 该 REORG TABLE ... APPLY (PURGE) 操作在完成时会创建表的新版本。 若要从以前的表版本完全删除已删除的文件,必须将清除操作的完成时间戳设置为保留阈值 VACUUM 。 请参阅清除仅元数据删除以强制重写数据。
优化大型表的性能表现
若要在清除大型表上的软删除数据时提高性能,请将 spark.databricks.delta.reorg.purgeMode 设为 rows。 例如,在手动清除数据时使用REORG TABLE ... APPLY (PURGE),或在去除删除向量时使用ALTER TABLE DROP FEATURE deletionVectors设置此配置。
默认情况下,spark.databricks.delta.reorg.purgeMode 设置为 all。 在大型表中,此操作可能很慢,因为清除操作必须扫描所有 Parquet 文件页脚来检查已删除的列数据和软删除的行。
该值 rows 将操作限制为仅处理软删除行文件。 在大型表中,如果许多文件中没有软删除的行且表中没有被删除的列,则可能会提高性能。
客户端兼容性
Azure Databricks 使用删除向量为已启用 Photon 的计算更新提供预测 I/O 支持。 请参阅使用预测性 I/O 加快更新速度。
对读取和写入的删除向量的使用的支持因客户端而异。
下表显示了读取和写入启用了删除矢量的表所需的客户端版本,并指定哪些写入操作使用删除向量:
| 客户端 | 写入删除向量 | 读取删除向量 |
|---|---|---|
| 带有 Photon 的 Databricks Runtime | 支持 Databricks Runtime 12.2 LTS 及更高版本中的 MERGE、UPDATE 和 DELETE。 |
需要 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 Apache Spark 和 OSS Delta Lake | 支持使用 OSS Delta 2.4.0 及更高版本的 DELETE。 支持使用 OSS Delta 3.0.0 及更高版本的 UPDATE。 |
需要 OSS Delta 2.3.0 或更高版本。 |
| Delta 共享收件人 | 增量共享表不支持写入。 | Databricks:需要 Databricks Runtime 14.1 或更高版本。 开源 Apache Spark:需要 delta-sharing-spark 3.1 或更高版本。 |
有关其他客户端的支持,请参阅 OSS Delta Lake 集成文档。
限制
- UniForm Iceberg v2 不支持删除向量。 Apache Iceberg v3 支持启用了 UniForm 的表上的删除向量。 请参阅 使用 Apache Iceberg v3 功能。
- 不能使用 GENERATE 语句 为包含删除向量文件的表生成清单文件。 若要生成清单,请先运行 REORG TABLE … APPLY (PURGE) 语句 ,然后运行
GENERATE语句。 必须确保在提交REORG语句时,没有任何并发的写入操作正在进行。 - 不能以增量方式为启用了删除矢量的表生成清单文件(例如,通过设置表属性
delta.compatibility.symlinkFormatManifest.enabled=true)。 - 如果您在具体化视图或流式表上启用了删除向量,并随后删除这些向量,那么删除向量将不适用于该视图或表的未来写入操作,但现有的删除向量会继续保留。
- 在物化视图或 Streaming 表上启用删除向量后,无法降级表协议。 启用后,无法删除删除向量的表特征,即使您随后在视图或表上禁用了删除向量也是如此。