针对 Delta Lake 和 Apache Iceberg 表报告的表大小不同于云对象存储中相应文件目录的总大小。 这些数据格式保留以前版本的数据文件,以允许时间旅行查询。 只有在超过保留阈值后运行 VACUUM,才会删除数据文件。 请参阅使用 vacuum 删除未使用的数据文件。
表大小为何不同于目录大小
Azure Databricks 中通过 UI 和 DESCRIBE 命令显示的表大小,是指当前版本的表所引用的数据文件在存储中的总大小。 写入表的大多数操作都需要重写基础数据文件,并保留旧数据文件以允许时间旅行查询。
注意
如果定期删除或更新表中的记录,删除向量可以加速查询并减少数据文件的总大小。 请参阅 Databricks 中的删除向量。
计算表的存储指标
适用于:
Databricks Runtime 18.0 及更高版本
若要了解总存储大小与表大小有何不同,请使用 ANALYZE TABLE … COMPUTE STORAGE METRICS。 此命令显示存储分配的详细细分,帮助你:
-
识别成本优化机会:查看通过
VACUUM可回收多少存储空间 - 分析时间旅行开销:了解保留历史数据的成本
- 跟踪存储模式:通过定期运行命令来监视表存储随时间变化的方式
- 审核跨表存储:循环运行该命令以分析您的整个数据资产
该命令返回全面的指标,包括:
- 总存储大小:完整占用空间,包括所有数据、元数据和日志
- 活动数据:当前表版本的大小
- 可清空数据:可回收的空间
- 时间旅行数据:用于回滚的历史数据
对于 Unity 目录托管表,Azure Databricks 通过 预测优化自动管理存储,这尤其有用。
请参阅 ANALYZE TABLE ...计算存储指标的完整语法和示例。
使用预测优化来控制数据大小
Databricks 建议使用 Unity Catalog 托管表,后者启用了预测优化。 借助托管表和预测优化,Databricks 会自动运行 OPTIMIZE 和 VACUUM 命令,以防止生成未使用的数据文件。 预测当前版本的表大小与云对象存储中数据文件的总大小之间始终存在差异。 为支持时间旅行查询,当前版本中未引用的数据文件是必需的。 请参阅 Unity Catalog 托管表的预测性优化。
VACUUM 存储指标
使用 VACUUM 清理未使用的数据文件或使用 DRY RUN 预览要删除的文件集时,指标将报告已删除的文件数和大小。 删除 VACUUM 的文件的大小和数量会大不相同,但已删除文件的大小通常超过当前版本的表的总大小。
OPTIMIZE 存储指标
当 OPTIMIZE 在目标表上运行时,新数据文件会合并现有数据文件中的记录。 在 OPTIMIZE 期间提交的更改仅影响数据组织,底层数据内容不会发生任何变化。 运行后 OPTIMIZE ,表的基础数据文件的总大小会增加,因为新的压缩文件与旧的未优化数据文件共存于包含目录中。
运行 OPTIMIZE 后报告的表大小通常小于运行 OPTIMIZE 前的大小,因为当前表版本引用的数据文件的总大小会随着数据压缩而减少。 若要删除基础数据文件, VACUUM 必须在保留阈值通过后运行。
注意
你可能会看到类似操作的指标,例如 REORG TABLE 或 DROP FEATURE。 需要重写数据文件的所有操作都会增加包含目录中的总数据大小,直到 VACUUM 删除当前表版本中不再引用的数据文件。