我有一个没有时间表的DAG(根据需要手动运行)。它有很多任务。有时我想通过手动将任务状态更改为SUCCESS来“跳过”一些初始任务。更改手动执行的DAG的任务状态失败,似乎是因为解析execution_date时出现错误。
是否有另一种方法可以为手动执行的DAG单独设置任务状态?
以下示例运行。任务的执行日期是01-13T17:27:13.130427,我相信毫秒没有被正确解析。
追踪(最近一次通话): 在set_task_instance_state中输入文件“/opt/conda/envs/jumpman_prod/lib/python3.6/site-packages/airflow/www/views.py”,第2372行 execution_date = datetime.strptime(execution_date,'%Y-%m-%d%H:%M:%S') 在_strptime_datetime中输入文件“/opt/conda/envs/jumpman_prod/lib/python3.6/_strptime.py”,第565行 tt,fraction = _strptime(data_string,format) 文件“/opt/conda/envs/jumpman_prod/lib/python3.6/_strptime.py”,第365行,在_strptime中 data_string [found.end():]) ValueError:未转换的数据仍然存在:.130427
答案 0 :(得分:1)
您可能想要做的是使用分支,顾名思义,它允许您根据某些条件遵循不同的执行路径,就像if
一样用任何编程语言。
您可以使用BranchPythonOperator
(已记录here)来实现此目标:我们的想法是此运算符由python_callable
配置,该函数输出{{1}下一步执行(当然,这应该是直接位于task_id
本身下游的任务)。
使用分支会自动将BranchPythonOperator
任务设置为正确状态,如文档中所述:
所有其他“分支”或直接下游任务都标记为
skipped
状态,以便这些路径无法向前移动。向下传播skipped
个状态以允许填充DAG状态并推断DAG运行状态。
生成的DAG如下所示:
在Apache Airflow官方文档中记录了分支here。
答案 1 :(得分:0)