Azure Data Factory中如何将调度触发的scheduleTime传递给Blob事件触发器
ADF调度触发器时间参数传递给Blob事件触发器的解决方案
核心原因:Blob事件触发器的原生上下文仅包含存储事件相关属性(如Blob路径、事件类型、存储账户信息等),不存在调度触发器特有的
scheduledTime属性,因此直接在Blob触发器的路径规则里引用@trigger().scheduledTime无法生效。
方案1:通过管道参数中转,实现两个触发器的时间参数统一
该方案适用于两类触发器触发同一业务管道、且管道内需要使用统一时间维度的场景:
- 给你的业务管道新增1个日期类型的入参,例如命名为
processDate,默认值可设置为@utcnow()方便单独测试管道。 - 调整原有调度触发器的配置,在触发参数绑定规则中,将
@trigger().scheduledTime赋值给管道的processDate参数。 - 调整Blob事件触发器的配置,在触发参数绑定规则中,将
@trigger().outputs.body.eventTime(Blob事件的生成时间,格式为UTC标准时间)或者@utcnow()赋值给管道的processDate参数。 - 管道内部所有需要用到时间维度的地方,统一引用
@pipeline().parameters.processDate即可,你给出的路径示例可以调整为:landing/some_data_source/some_dataset/@{formatDateTime(pipeline().parameters.processDate, 'yyyyMMdd')}/_SUCCESS
方案2:调度触发时动态更新Blob触发器的路径过滤规则
该方案适用于需要让Blob触发器仅监听调度时间对应日期路径的场景:
- 新增一个调度触发器触发的控制管道,控制管道新增
scheduleTime参数,由调度触发器把@trigger().scheduledTime赋值给该参数。 - 在控制管道中添加
Web活动,调用ADF的触发器更新接口,把Blob事件触发器的路径过滤规则中的日期部分,替换为@formatDateTime(pipeline().parameters.scheduleTime, 'yyyyMMdd')格式化后的字符串,实现路径的动态更新。 - 调整完成后,Blob事件触发器就只会监听对应日期路径下的
_SUCCESS标记文件。
内容的提问来源于stack exchange,提问作者marknorkin
相关产品推荐
相关产品推荐

