当新文件到达外部位置(例如 Amazon S3 或 Azure 存储)时,你可以使用文件到达触发器来触发 Azure Databricks 作业的运行。 当计划作业因新数据无规律到达而效率低下时,你也可以使用此功能。
文件到达触发器的工作原理是什么?
文件到达触发器会尽力确保每分钟检查一次新文件,尽管这可能会受到底层云存储性能的影响。 除了因列出存储位置中的文件而产生的云提供商成本之外,文件到达触发器不会产生其他成本。
文件到达触发器可以配置为监视 Unity Catalog 外部位置或卷的根,或者外部位置或卷的子路径。 例如,对于 Unity 目录卷 /Volumes/mycatalog/myschema/myvolume/
,下面是文件到达触发器的有效路径:
/Volumes/mycatalog/myschema/myvolume/
/Volumes/mycatalog/myschema/myvolume/mydirectory/
文件到达触发器以递归方式检查配置位置的所有子目录中是否有新文件。 例如,假设你为位置 /Volumes/mycatalog/myschema/myvolume/mydirectory/
创建文件到达触发器,并且此位置具有以下子目录:
/Volumes/mycatalog/myschema/myvolume/mydirectory/subdirA
/Volumes/mycatalog/myschema/myvolume/mydirectory/subdirB
/Volumes/mycatalog/myschema/myvolume/mydirectory/subdirC/subdirD
触发器会检查 mydirectory
、subdirA
、subdirB
、subdirC
和 subdirC/subdirD
中是否有新文件。
包含文件事件的文件到达触发器
重要
文件事件目前处于 公共预览版阶段。
为了获得最佳性能,应为 文件事件启用外部位置。 为外部位置启用文件事件时,Azure Databricks 使用内部服务通过处理来自云提供商的更改通知来跟踪引入元数据。 此服务保留在服务确定的滚动保留期内创建或更新的最新文件的元数据,从而提高文件处理效率。
在外部位置启用文件事件的几分钟内,监视该外部位置涵盖的路径的现有文件到达触发器会开始从文件事件启用中获益。 新触发器在数秒内就能见效。
有关文件事件在外部位置的性能和容量优势的详细信息,请参阅“限制”。
在您开始之前
若要使用文件到达触发器,需要满足以下要求:
工作区必须已启用 Unity Catalog。
使用的存储位置必须为卷或 Unity Catalog 中配置的外部位置。 请参阅 什么是 Unity 目录卷? 并 创建外部位置以将云存储连接到 Azure Databricks。
Databricks 建议 为托管文件事件启用外部位置。 默认情况下,这些外部位置上的卷会获取文件事件支持。 若要启用文件事件,你必须是外部位置的所有者或在外部位置具有
MANAGE
权限。 关于文件事件优点的信息,请参阅 文件到达触发器与文件事件。必须拥有存储位置的
READ
权限以及作业的 CAN MANAGE 权限。 有关作业权限的详细信息,请参阅作业 ACL。
限制
- 用于文件到达触发器的路径不得包含外部表或目录和架构的托管位置。
- 用于文件到达触发器的路径不能包含通配符(例如
*
或?
)。 - 如果将存储位置配置为 Unity Catalog 中的外部位置,并且该外部位置启用了文件事件功能:
- 最多可以配置 1,000 个作业,并在 Azure Databricks 工作区中使用文件到达触发器。
- 存储位置中的文件数没有限制。
- 当触发器监视某个位置的子路径(无论是否为外部位置卷)时,根位置中的更改数可能导致触发器超过处理更改的允许时间。 如果发生这种情况,触发器将设置为错误状态。 通过配置触发器来监视位置的根目录可以防止这种情况。 例如,可以在子路径上创建 Unity 目录卷,但在卷的根目录上配置触发器。
- 如果修改了现有文件并且其元数据超出了滚动保留期,该修改将被视为新文件到达,从而触发作业运行。 您可以通过仅引入不可变文件来避免此问题,或者可以使用Auto Loader中的文件到达触发器来跟踪引入进度。
- 如果未为文件事件启用存储位置:
- 仅运行新的文件触发器。 使用同名文件覆盖现有文件不会触发运行。
- 最多可以配置 50 个作业,并在 Azure Databricks 工作区中的此类位置上配置文件到达触发器。
- 存储位置最多可以包含 10,000 个文件。 如果配置的存储位置是 Unity Catalog 外部位置或卷的子路径,则 10,000 个文件的限制适用于该子路径,而不适用于存储位置的根。 例如,存储位置的根的子目录中可以包含 10,000 多个文件,但配置的子目录不得超过 10,000 个文件的限制。
另请参阅 文件事件限制。
添加文件到达触发器
若要将文件到达触发器添加到作业,请执行以下操作:
在边栏中,单击“工作流”。
在“作业”选项卡上的“名称”列中,单击作业名称。
在右侧的“作业详细信息”面板中,单击“添加触发器”。
在“触发器类型”中,选择“文件到达”。
在存储位置中,输入 Unity Catalog 外部位置的根或子路径的 URL,或者要监视的 Unity Catalog 卷的根或子路径的 URL。
(可选)配置高级选项:
- 最短触发时间间隔(秒):在上一次运行完成之后等待触发运行的最短时间。 只有在等待时间过去之后,在此时段到达的文件才会触发运行。 使用此设置可以控制运行创建频率。
- 在上次更改之后的等待时间(秒):在文件到达之后等待触发运行的时间。 如果此时段内又有文件到达,则会重置计时器。 当文件分批到达时可以使用此设置,并且需要在所有文件到达后处理整个批。
若要验证配置,请单击“测试连接”。
单击“保存”。
接收文件到达触发器失败通知
若要在文件到达触发器评估失败时接收通知,请配置用于接收作业失败通知的电子邮件或系统目标。 请参阅为作业添加通知。