Azure Databricks 上的表大小

Azure Databricks 上 Delta Lake 支持的表报告的表大小不同于云对象存储中相应文件目录的总大小。 本文讨论存在这种差异的原因,以及控制成本的建议。

为什么 Delta 表大小与目录大小不匹配?

Azure Databricks 中通过 UI 和 DESCRIBE 命令报告的表大小是指磁盘上数据文件的总大小,这些文件在当前版本的 Delta 表中引用。 写入表的大多数操作都需要重写基础数据文件,但旧数据文件会保留一段时间以支持时间旅行查询。

备注

如果定期删除或更新表中的记录,删除向量可以加速查询并减少数据文件的总大小。 请参阅什么是删除向量?

使用预测优化来控制数据大小

Databricks 建议使用 Unity Catalog 托管表,后者启用了预测优化。 借助托管表和预测优化,Databricks 可以自动运行 OPTIMIZEVACUUM 命令,以防止生成未使用的数据文件。 预测当前版本的表大小与云对象存储中数据文件的总大小之间始终存在差异。 这是因为当前版本中未引用的数据文件需要支持时间旅行查询。

VACUUM 报告哪些文件指标?

使用 VACUUM 清理未使用的数据文件或使用 DRY RUN 预览要删除的文件集时,指标将报告已删除的文件数和大小。 VACUUM 删除的文件的大小和数量会大不相同,但已删除文件的大小会超过当前版本表的总大小并不常见。

OPTIMIZE 报告哪些文件指标?

OPTIMIZE 在目标表上运行时,新数据文件会合并现有数据文件中的记录。 在 OPTIMIZE 期间提交的更改只会影响数据组织,并且不会对基础数据内容进行更改。 运行 OPTIMIZE 后,与表关联的数据文件的总大小会增加,因为新的压缩文件与不再引用的数据文件共存于包含目录中。

运行 OPTIMIZE 后报告的表大小通常小于运行 OPTIMIZE 前的大小,因为当前表版本引用的数据文件的总大小会随着数据压缩而减少。 VACUUM 必须在保留阈值通过后运行,这样才能删除基础数据文件。

备注

你可能会看到类似操作的指标,例如 REORG TABLEDROP FEATURE。 需要重写数据文件的所有操作都会增加包含目录中的总数据大小,直到 VACUUM 删除当前表版本中不再引用的数据文件。