使用 REORG 重新组织 Delta 表

REORG如果需要为特定的维护目标重写 Delta 表的一部分,请使用该命令。 在Fabric中,REORG通过重写数据文件或更新表元数据来重新组织表的物理布局,具体取决于所选的选项。

REORG 不同于例程文件压缩。 它适用于物理删除被删除向量标记为已删除的行等场景。

REORG 的作用

REORG TABLE 重写定义的维护操作的表状态。

  • APPLY (PURGE) 通过重写受影响的数据文件,将通过删除向量软删除的行从底层 Parquet 文件中实际移除。

当你需要特定的重写结果,而不只是更小或更少的文件时,请使用 REORG

使用 PURGE 物理删除已软删除的行

删除向量允许 Delta Lake 将行标记为已删除,而无需立即重写原始 Parquet 文件。 该行为使删除操作保持高效,但已删除的行数据仍存在于物理文件中,直到重写它们。

当你运行 REORG TABLE ... APPLY (PURGE) 时,Fabric 会重写受影响的文件,并从当前使用中的 Parquet 文件中删除已软删除的行。 PURGE完成后,这些已删除的行实际上已从重写的文件中删除。

注释

PURGE 通常不需要作为单独的维护步骤。 OPTIMIZE 会在压缩期间自动清理其中超过 5% 的记录被删除向量引用的文件。 仅在需要显式控制何时物理删除已软删除的行时,才使用 PURGE

此选项在以下情况下很有用:

  • 你具有合规性或 GDPR 要求,需要按特定计划以物理方式删除已删除的数据。
  • 你想要强制清除低于 OPTIMIZE 所使用的 5% 阈值的文件。

查看语法

在Fabric笔记本中使用以下示例。

从表中清除软删除的行

REORG TABLE table_name APPLY (PURGE)

仅清除匹配数据中已软删除的行

REORG TABLE table_name WHERE predicate APPLY (PURGE)

如果您想以特定分区或较小的数据切片为目标,请使用 WHERE 子句。

REORG TABLE sales.orders
WHERE order_date = DATE '2026-05-01'
APPLY (PURGE)

选择 REORG 或 OPTIMIZE

REORGOPTIMIZE 解决不同的问题。

  • OPTIMIZE 执行 bin 压缩。 它将小型文件合并到较大的文件中,以提高扫描效率。
  • REORG ... APPLY (PURGE) 以物理方式删除标记为已删除的删除向量的行。

可以将这两个命令一起使用。 例如,可以运行 REORG ... APPLY (PURGE) 以物理方式删除已删除的数据,然后运行 OPTIMIZE 以改进文件布局。

了解删除向量

删除向量是将行标记为已删除的元数据结构,无需立即重写包含这些行的 Parquet 文件。 读取器遵循删除向量,因此删除的行不会显示在查询结果中,但在重写发生之前,这些字节仍保留在存储中。

REORG ... APPLY (PURGE) 是将这些行从重写后的 Parquet 文件中实际删除的步骤。

在 Fabric 中运行 REORG

在 Fabric 的基于 Spark 的体验中运行 REORG,例如:

  • Fabric 笔记本
  • Spark 任务定义

不要从 SQL 分析终结点运行 REORGREORG 是 Delta 表的 Spark SQL 维护命令。

遵循最佳做法

  • 仅在有特定需求(例如符合性要求)时运行 PURGEOPTIMIZE 自动清除删除向量引用超过 5% 记录的文件,因此例行维护通常不需要单独的 PURGE 步骤。
  • 当您需要为满足合规或 GDPR 要求而将已删除的数据从物理上移除时,请在 PURGE 之前运行 VACUUM
  • 当不需要重写完整表时,使用 WHERE 谓词以特定分区为目标。
  • 当您需要 Iceberg 读取器时,请使用 UPGRADE UNIFORM,但要将 UniForm 维护的额外元数据考虑在内。
  • REORGOPTIMIZE 视为互补的维护操作,而不是可互换的操作。