Azure Databricks 上的表大小

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

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

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

注意

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

计算表的存储指标

适用于:选中“是” Databricks Runtime 18.0 及更高版本

若要了解总存储大小与表大小有何不同,请使用 ANALYZE TABLE … COMPUTE STORAGE METRICS。 此命令提供存储分配的详细细分,帮助你:

  • 确定成本优化机会:查看可回收多少存储 VACUUM
  • 分析时间旅行开销:了解保留历史数据的成本
  • 跟踪存储模式:通过定期运行命令来监视表存储随时间变化的方式
  • 审核跨表存储:在循环中运行命令以分析整个数据资产库

该命令返回全面的指标,包括:

  • 总存储大小:完整占用空间,包括所有数据、元数据和日志
  • 活动数据:当前表版本的大小
  • 可清空数据:可回收的空间
  • 时间旅行数据:用于回滚的历史数据

请参阅 ANALYZE TABLE...计算存储指标 的完整语法和示例。

VACUUM 报告哪些文件指标?

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

OPTIMIZE 报告哪些文件指标?

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

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

注意

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