在Delta表中的删除向量 加快在Databricks中的操作速度

优化Databricks操作速度:删除Delta表中的向量

传统上,Delta Lake只支持写时复制的模式,即在写入文件后任何时候都会更改底层数据文件。例如:当删除文件中的单个行时,必须重写整个Parquet文件。考虑到您的数据分散在多个文件中,并且数据频繁更新,这种模式效率不高。为了满足这种需求,Databricks最近推出了一项名为删除向量的新功能。在本文中,我们将了解更多关于删除向量的内容,它们的用途以及如何启用它们。

删除向量是一种存储优化功能,可以在Delta Lake表上启用。启用表的删除向量后,引入了一种名为“合并读取”的新模式。删除和更新操作使用删除向量来标记现有行的删除或更改,而无需重写Parquet文件。对表的后续读取通过应用删除向量中记录的删除操作来解析当前表状态,以获取最新的表版本。

启用删除向量

建议使用Databricks运行时14.1版本或更高版本来写入启用了删除向量的表,以利用所有优化。尽管Databricks 12.1运行时版本支持从启用了删除向量的表中读取,但建议使用14.1+版本,因为它支持写入和优化。此外,如果您真的要切换并使用行级并发性,请开始使用14.2+版本。

可以使用以下方法启用删除向量:

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

使用删除向量在Delta表中如何进行删除?

每当我们在Delta表中删除或更新记录时,写入将更改的行位置单独标记在数据文件本身之外,这个操作称为“软删除”。删除行的位置以高度压缩的位图格式(RoaringBitmap)进行编码,稍后可以将其合并到数据文件中。

这些更改在数据文件被重写时物理应用,由以下事件触发:

  • 当我们在表上应用OPTIMIZE命令时。
  • 自动压缩触发使用删除向量重新编写数据文件。
  • 对表运行REORG TABLE ... APPLY (PURGE)

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

REORG TABLE —

通过重新编写文件来重新组织Delta Lake表,以去除软删除的数据。

REORG TABLE table_name [WHERE predicate] APPLY (PURGE)

示例:

REORG TABLE events APPLY (PURGE);REORG TABLE events WHERE date >= '2022-01-01' APPLY (PURGE);

注意:

  • REORG TABLE仅重新编写包含软删除数据的文件。
  • REORG TABLE是幂等的,这意味着如果在同一数据集上运行两次,第二次运行没有效果。
  • 运行REORG TABLE后,旧文件中可能仍存在软删除的数据。我们可以运行VACUUM物理删除旧文件。

注意:Databricks利用删除向量来支持基于光子的计算上的预测性IO。查看官方文档-使用预测性IO加速更新以了解更多关于预测性IO的信息。

什么时候应该使用删除向量?

删除向量在对表进行删除操作时带来了优化效果,因此可能被视为一个明显的选择,但在使用删除向量时必须考虑一些权衡:

  1. 写入频率和延迟 SLA:当写入频率较高或需要低写入延迟时,使用删除向量,特别是对于导致传统的写入放大模式中的大量写入扩张的小数据变化。在低写入频率场景下,对于具有灵活延迟要求的情况,删除向量可能并不如传统模式优势明显。
  2. 读取频率和延迟 SLA:在高读取的场景中小心使用删除向量,因为处理额外的删除向量文件会带来额外的执行时间成本。
  3. 数据布局和变化分布:当数据变化分散在许多文件中时,删除向量表现出色,这使得传统的写入放大方法非常昂贵。特别注意对于数据变化的匹配谓词。Levi库(https://github.com/MrPowers/levi)提供了简化访问底层文件统计信息的辅助方法。

限制:

Databricks建议不要在使用Databricks SQL或Delta Live Tables时启用删除向量的流式表。

在Databricks Runtime 12.1及更高版本中,存在以下限制:

  • 启用删除向量的表不支持Delta Sharing。
  • 对于存在删除向量的表,无法为其生成清单文件。运行REORG TABLE ... APPLY (PURGE)并确保不存在并发写操作,以生成清单。
  • 对于启用删除向量的表,无法增量生成清单文件。

结论:

对于我来说,这更多是一个学习,我在这里做的不是写任何东西,而是参考Databricks和Delta页面。它们很棒。在这里分享以供参考:

愉快学习… Muttineni Sai Rohith 签退…