注释
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/)。移动位置必须:
自动加载程序必须对此目录具有写入权限。 |
启用前的考虑 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_time30天后才有资格进行清理。 无论中间有多少次溪流,这一规则都成立。 文件移动或删除前必须满足这两个条件。