手动触发的DAG应该使用哪个start_date?

12
许多设有schedule_interval=NoneAirflow示例DAG会设置动态开始日期,例如airflow.utils.dates.days_ago(2)datetime.utcnow()。但是,官方文档不建议使用动态开始日期:

我们建议不要使用动态值作为start_date,特别是datetime.now(),因为它可能会导致混淆。任务在周期结束时触发,在理论上,@hourly DAG永远无法到达now()之后的一个小时,因为now()会持续移动。

对于手动触发的DAG,开始日期是否无关紧要?这里应该采取什么最佳实践呢?


我不确定你遇到的问题是否清楚。你能否在问题周围添加更多上下文,比如说如果动态的“start_date”对你不起作用,具体你想要实现什么?你所描述的方法对我来说似乎很好,因为对于只有外部触发的DAG来说,“start_date”并不是太重要。这是一个好问题,因为我认为当前的文档没有明确说明这种用例。 - Taylor D. Edmiston
2
@TaylorEdmiston 没有明显的问题,只是文档和示例之间存在冲突,让我作为用户感到不确定。教程经常提到 start_date,所以我不确定它是否真的无关紧要。 - rcorre
3个回答

7

我总是尝试将手动触发的DAG的开始日期设置为我第一次运行它的那天,这样我就知道在未来参考时DAG最初会运行的时间。


1
我最终将start_date设置为1970年1月1日(过去很久以前),这样Airflow就不会抱怨执行日期在开始日期之前了。

1
如果你的 schedule_interval=None,我认为start_date是无关紧要的,因为airflow将不会尝试执行任何回填。只需将其设置为任何值,即使它是动态的,也不应该引起任何麻烦。

我不建议这样做。即使对于手动触发的DAG,您可能也需要手动回填,例如使用airflow backfill命令。如果动态开始日期在所选回填日期之后,则会阻塞您的任务。 - Andy Carlson
1
我不完全理解为什么您想手动触发没有时间间隔定义的DAG的回填,但好吧。是的,显然您需要确保开始日期在过去,即使它是动态的。 - Simon D
我们这样做是因为我们需要execution_date在过去。 - Andy Carlson
当您使用trigger_dag手动触发dag时,可以在那里提供执行日期。 - Simon D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接