如何配置ADF存储事件触发器捕获sf3文件并传路径给ADB笔记本?
ADLS Gen2新增文件实时触发ADF并传参给Databricks实现方案
这个场景用Azure原生的事件驱动能力就能落地,不需要做定时轮询,触发延迟在秒级,完全匹配无固定上传节奏、文件落地即触发的要求。
核心实现步骤
- 配置ADF存储事件触发器
首先确保你的ADLS Gen2对应存储账号已经注册了事件网格资源提供程序,之后在ADF工作室新建存储事件触发器,配置项按下面填:
- 订阅、存储账号选你实际存放业务文件的ADLS Gen2实例
- 监听事件类型只勾选
Blob Created,不需要选其他删除、更新类事件 - Blob路径开头填
f1/sf1/sf2/sf3/,Blob路径结尾留空,这样触发器只会监听sf3目录下的文件新增动作,不会响应上层目录的操作 - 触发器直接关联你需要运行的目标业务管道
- 配置ADF存储事件触发器
- 自动捕获新增文件完整路径
存储事件触发器触发时会自动携带新增文件的元数据,不需要额外调用接口查路径,直接做参数映射即可:
- 先给管道定义一个字符串类型的入参,比如命名为
new_file_full_path - 在触发器的参数映射配置里,把系统变量拼接后赋值给这个参数,表达式如下:
@concat(triggerBody().folderPath, '/', triggerBody().fileName)
说明:上面拼接出来的路径是容器名之后的相对路径,如果你的ADB访问ADLS需要带完整的绝对路径(含存储端点、容器名),直接在concat函数里补全对应前缀就行,用挂载方式访问ADLS的话,这个相对路径可以直接用。
- 自动捕获新增文件完整路径
- 传递路径参数给Databricks笔记本
在管道里添加Azure Databricks笔记本活动,完成下面配置:
- 提前配置好指向目标ADB工作区的链接服务,选择你要用的计算集群(常驻集群、作业集群都支持)
- 填写需要运行的ADB笔记本在工作区中的路径
- 在活动的基参数配置栏,新增一个参数,参数名和你ADB笔记本里定义的接收变量名保持一致,参数值直接引用前面管道定义的
new_file_full_path参数
管道运行时,这个文件路径会自动传入ADB笔记本,你在笔记本里用dbutils.widgets.get("你定义的参数名")就能直接拿到路径做后续处理。
- 传递路径参数给Databricks笔记本
可选优化配置
- 重复触发规避:事件网格采用至少一次交付策略,极端情况可能出现同一文件重复触发的问题,可以在管道最前面加校验逻辑,比如把已经处理过的文件路径写入日志表,触发后先查日志,已经处理过的直接终止流程即可
- 临时文件过滤:如果大文件上传过程中会生成
.tmp、.part之类的临时文件,可以在触发器或者管道入口加后缀判断,只处理你业务要求的正式文件格式 - 失败重试配置:给ADB笔记本活动配置2-3次的重试规则,遇到偶发的网络波动、集群启动失败问题自动重试,减少人工介入成本
内容的提问来源于stack exchange,提问作者Hillol Saha
相关产品推荐
相关产品推荐

