如何配置管道触发日期参数,实现失败任务按原日期重跑?
解决管道重跑时运行日期参数的问题
核心思路
别再用utcnow()了,改用触发器的计划执行时间变量——这个变量在重跑时会保留原触发的日期,而非取当前时间,逻辑和Airflow里的execution_date完全一致,刚好匹配你的需求。
具体实现步骤
1. 针对调度触发器(自动定时跑)
不需要额外加参数,直接用系统自带的触发器上下文变量:
- 直接获取计划时间:
@trigger().scheduledTime
- 转成你需要的日期格式(比如只取年月日):
@formatDateTime(trigger().scheduledTime, 'yyyy-MM-dd')
重跑时这个变量会返回原计划触发的时间,不会变成重跑当天的日期。
2. 针对手动触发器(需要手动指定日期)
- 先在触发器的「参数」里新增一个参数,比如
runDate,类型选字符串,格式设为yyyy-MM-dd; - 管道里直接引用这个参数:
@pipeline().parameters.runDate
手动触发时输入目标日期,重跑时这个参数会保留你第一次输入的值,不会自动替换成当前日期。
3. 替换原有逻辑
把管道里所有用utcnow()获取运行日期的地方,替换成上面的变量或参数即可。
额外提示
如果用的是Azure Data Factory,建议先在管道的「参数」里定义一个runDate参数,再把触发器的变量/参数传递给它,这样管道里统一用@pipeline().parameters.runDate,后续调整会更灵活。
内容的提问来源于stack exchange,提问作者BelowZero
相关产品推荐
相关产品推荐

