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

注释

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 days,2 weeks或1 month 等待处理后的文件在清理干净源码时需要等待的时间。 对于 DELETE 操作来说必须长于 7 天。 对于 MOVE 操作来说没有最低限制。
cloudFiles.cleanSource.waitForCompletion false true、false 该选项可在 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天后才有资格进行清理。 无论中间有多少次溪流,这一规则都成立。 文件移动或删除前必须满足这两个条件。