用自动加载器清理已处理的文件

注释

cloudFiles.cleanSource 可在Databricks Runtime 16.4及以上版本中提供。

在文件处理完成后,用于 cloudFiles.cleanSource 从源目录中移动或删除文件。 删除已处理的文件可以降低存储成本,并缩短未来列表操作的持续时间。

模式 Description
OFF(默认值) 源目录中的文件不会被移动或删除。
MOVE 源目录中的文件会在保留期限(默认30天)之后,通过经过时间被cloudFiles.cleanSource.retentionDuration移动到指定的cloudFiles.cleanSource.moveDestination路径。
DELETE 源目录中的文件会在保留期限(默认30天)后被删除,该期限由 cloudFiles.cleanSource.retentionDuration 经过时间定义。
附加选项 默认 有效值 Description
cloudFiles.cleanSource.retentionDuration 30 days CalendarInterval 字符串,例如14 days2 weeks1 month 等待处理后的文件在清理干净源码时需要等待的时间。 对于 DELETE 操作来说必须长于 7 天。 对于 MOVE 操作来说没有最低限制。
cloudFiles.cleanSource.waitForCompletion false truefalse 该选项可在 Databricks 运行时 19 及以上版本中使用。
干净源默认是尽力而为的操作。 如果流在清理源文件移动或删除文件完成前完成处理,清洁源操作将终止。 设置会 cloudFiles.cleanSource.waitForCompletion 强制流保持存活,直到干净源码完成文件移动或删除。 如果有大量文件需要删除,这会增加流的运行时间。
这只适用于流自行完成时(例如 availableNow 触发耗尽所有文件)。 手动停止或取消流会立即终止干净源操作,即使该选项已设置。
cloudFiles.cleanSource.moveDestination 没有 云存储或 Unity 目录卷路径 cloudFiles.cleanSource 设置为 MOVE 时已处理文件的存档路径。 这可以是云存储路径或 Unity 目录卷 路径(例如 /Volumes/my_catalog/my_schema/my_volume/archive/)。
移动位置必须:
  • 不是源目录的子级。 如果将移动目标放置在源目录中,则会再次引入存档的文件。
  • 与源位于同一外部位置、卷或 DBFS 装载中。 不支持在不同存储桶和存储容器之间移动文件,将导致错误。

自动加载程序必须对此目录具有写入权限。

启用前的考虑 cloudFiles.cleanSource

  • 当多个流同时消耗同一源目录的数据时,Azure Databricks不建议使用此选项。 最快的流会清理文件,所以慢的流永远不会被导入。
  • 启用此功能需要自动加载程序在其检查点中维护其他状态,这会产生性能开销,但可以通过 cloud_files_state 表值函数提高可观测性。 请参阅 cloud_files_state 表值函数
  • 干净源代码使用当前设置来决定是否使用MOVEDELETE某个文件。 例如,假设文件最初处理时的设置是MOVE,但在30天后文件成为清理候选时已更改为DELETE。 在这种情况下,干净源代码会删除文件。
  • 一旦 cloudFiles.cleanSource.retentionDuration 过期,不保证立即清理文件。 为了降低成本,自动加载器会在流处理过程中同时清理文件,并在流处理完成或终止时立即终止。 那些原本需要清理但无法在流处理中清理的文件,在下一次自动加载器运行时会被拾取。

关于清洁源的注释

  • 干净源代码只有在有一批文件需要处理时才会运行。 它不是一个独立于摄取运行的背景过程。 如果源目录中没有新文件可导入,当前流运行时不会开始干净源代码。 因此,如果流停止接收新文件,已经超过保留期限的文件不会被清理,直到后续流处理新一批处理时才会被清理。

    该批次要求无论 是否适用 cloudFiles.cleanSource.waitForCompletion。 这个选项只能让流水活到完成一次运行中的清理。 当没有批次可处理时,它不会启动干净源。

  • 如果在第 N 次流运行时导入文件,则 commit_time 在 N+1 流运行时,该文件的 for 被设置为。 commit_time 必须先设置,才能确定文件是否适合移动或删除,因此文件最早成为清理候选的是N+2次流运行。

  • 设定 commit_time 是必要的,但还不够。 文件只有在其保留时间结束后才会被清理,该时间以 为 commit_time单位。 例如,默认 cloudFiles.cleanSource.retentionDuration 为30天,今天处理的文件要在设置后 commit_time 30天后才有资格进行清理。 无论中间有多少次溪流,这一规则都成立。 文件移动或删除前必须满足这两个条件。