我使用的是Airflow 2.2.5,它是根据Postgres数据库的官方docker镜像构建的。举个例子,我有一个DAG,每天凌晨2点运行。只要我只打开"让它运行",这个过程就可以正常工作,DAG每天按计划在凌晨2点运行,但如果出于某种原因我需要手动运行,比如在上午11点,现在是第二天(以及以下所有时间(,DAG将在上午11时自动运行,而不是编程的凌晨2点。
我试着用cron表达式代替schedule_interval
的datetime.timedelta
,尽管在UI中DAG看起来会在凌晨2点运行(尽管是上午11点手动运行(,但DAG实际上只在上午11点运行,这与UI指示相反。
其他人注意到这种行为了吗?我能做些什么来防止手动运行干扰计划的运行吗?
感谢
Airflow是一个数据流工具,每次运行都会为您提供一些上下文变量,以便在处理中使用它们:
data_interval_start
:这是您将处理的数据中的第一个日期,等于上次运行的结束日期data_interval_end
:这是您将处理的数据中的最后一个日期
因此,如果您使用这些变量来筛选要处理的数据,则不能仅为了运行手动运行而更改schedule_interval
,因为如果您使用0 11,12 * * *
,则每天将有两次运行:
- 第一个
data_interval_start=12h00 of the previous day
和data_interval_end=11h00 of the current day
(23小时( - CCD_ 9和CCD_
但如果你有一个在每次运行时使用完整数据的dag,或者一个在不使用任何数据的情况下执行某些任务的dag的话,你可以通过不同的方式手动触发它:
- UI:点击dag页面底部的
Trigger DAG
- CLI:使用命令
airflow dags trigger <dag_id>
(doc( - API:
POST api/v1/dags/{dag_id}/dagRuns
(文档( - 气流插件:创建一个FlaskAppBuilder表单,用python方法创建运行(很复杂,只能在某些用例中使用(