Microsoft Fabric 中的 Delta 表维护

Delta 表维护有助于让表在不断增长的过程中始终保持高性能和存储效率。 随着时间的推移,Delta 表可以累积许多小型文件,已删除的数据可以继续使用存储空间,过时的统计信息可以降低查询效率。 定期维护有助于提高读取性能、回收存储,并使表元数据与工作负荷访问数据的方式保持一致。 将本文用作了解 Delta 表主要维护操作的快速指南。

为什么维护很重要

随着 Delta 表的增长,写入活动会更改表的物理布局。 重复引入作业可以创建许多小型文件,更新和删除操作可能会留下未引用的文件或软删除的行,而较旧的统计信息会使 Spark 更难跳过不必要的数据。 如果定期维护表,就可以减少扫描开销,帮助 Fabric 更有效地优化查询,并避免为活动表版本不再需要的存储付费。

使用 OPTIMIZE 进行箱压缩

当 Delta 表累积了许多小文件,并希望将它们合并为较少的大文件时,可使用 OPTIMIZE。 此操作通过减少文件管理开销并提高扫描效率,从而提高读取性能。 OPTIMIZE 还支持其他参数和功能,例如 VORDER。 有关完整语法、选项和示例,请参阅 表压缩V 顺序

OPTIMIZE table_name

使用 VACUUM 进行存储清理

当您想要删除早于所配置保留期限的未引用数据文件时,请使用 VACUUM。 在 Fabric 中,此操作可帮助你在执行更新、删除、合并、覆盖和压缩等操作后,回收 OneLake 存储空间。 VACUUM 侧重于存储清理,而不是查询优化,因此它通常补充其他维护任务,而不是替换它们。 有关保留指南和执行详细信息,请参阅 VACUUM

VACUUM table_name

使用 REORG 进行定向重组

需要为特定的维护目标重写表状态而不是常规文件压缩时使用 REORG 。 在 Delta Lake 中,REORG TABLE ... APPLY (PURGE) 会物理删除被删除向量标记为已删除的行。 有关支持的选项以及何时使用它们,请参阅 使用 REORG 重新组织 Delta 表

注释

REORG 通常不需要,因为 OPTIMIZE 自动清除删除向量引用超过 5% 记录的文件。

REORG TABLE table_name APPLY (PURGE)

使统计信息保持最新状态

Fabric Spark 运行时支持 Delta 表的两种类型的统计信息:文件统计信息和表统计信息。

  • 文件统计信息—每次写入数据文件时,Delta Lake 都会为索引列记录每个文件的最小值、最大值和空值计数。 Spark 引擎使用这些统计信息跳过不能包含与查询谓词匹配的行的文件,从而减少扫描的数据量。 默认情况下,收集前 32 列的统计信息。 有关文件跳过的工作原理以及如何自定义收集哪些列统计信息的详细信息,请参阅 文件跳过
  • 表统计信息—系统会自动维护针对表中所有文件汇总的列级统计信息,从而使 Spark 在进行查询规划时拥有更完善的元数据。 这些统计信息通过对筛选器、联接和聚合做出更好的优化决策来提高性能。 若要了解自动化统计信息的工作原理以及如何配置,请参阅 Delta 表的自动统计信息

使用自动压缩进行连续文件管理

Delta Lake 还支持在写入后自动压缩,因此表可以保持更健康,而无需每次单独手动作业。 可以通过表属性或工作区设置来控制此行为,具体取决于管理 Spark 工作负载的方式。 有关如何启用的详细信息,请参阅 自动压缩

在 Lakehouse UI 中运行维护操作

如果更喜欢基于 UI 的工作流,可以直接从 Lakehouse 资源管理器运行维护操作,请参阅 Lakehouse 表维护

遵循切实可行的维护节奏

在大批量摄取后,或当小文件开始累积并拖慢读取速度时,运行 OPTIMIZE。 定期运行VACUUM,例如每周一次或在大型压缩周期之后,以回收表不再引用的文件所占用的存储空间。 REORG TABLE ... APPLY (PURGE) 不需要作为例程维护,因为 OPTIMIZE 自动清除删除向量引用超过 5% 记录的文件。 将 PURGE 保留用于需要明确控制的场景,例如合规性或 GDPR 义务相关场景。 通过 DESCRIBE DETAILDESCRIBE HISTORY 监控表状态,以便跟踪每次操作前后的文件数量、大小和维护历史记录。

-- View current table state
DESCRIBE DETAIL table_name;

-- View history of transactions
DESCRIBE HISTORY table_name;