我想了解Airflow是否支持在DAG中跳过临时执行的任务?
可以说我的DAG图如下所示: 任务1>任务2>任务3>任务4
我想从task3手动启动DAG,最好的方法是什么?
我已经读过有关“ ShortCircuitOperator”的信息,但是我正在寻找更多的临时解决方案,一旦执行被触发,该解决方案便可以应用。
谢谢!
答案 0 :(得分:0)
您可以合并SkipMixin的ShortCircuitOperator uses under the hood来跳过下游任务。
from airflow.models import BaseOperator, SkipMixin
from airflow.utils.decorators import apply_defaults
class mySkippingOperator(BaseOperator, SkipMixin)
@apply_defaults
def __init__(self,
condition,
*args,
**kwargs):
super().__init__(*args, **kwargs)
self.condition = condition
def execute(self, context):
if self.condition:
self.log.info('Proceeding with downstream tasks...')
return
self.log.info('Skipping downstream tasks...')
downstream_tasks = context['task'].get_flat_relatives(upstream=False)
self.log.debug("Downstream task_ids %s", downstream_tasks)
if downstream_tasks:
self.skip(context['dag_run'], context['ti'].execution_date, downstream_tasks)
self.log.info("Done.")
答案 1 :(得分:0)
通过Apache Airflow的构建方式,您可以编写逻辑/分支来确定要运行的任务。
但
您不能从两者之间的任何任务开始执行任务。。顺序完全由依赖项管理(上游/下游)定义。
但是,如果您使用的是celery运算符,则可以忽略运行中的所有依赖关系,并让气流根据需要执行任务。再说一次,这不会阻止上游任务的调度。
答案 2 :(得分:0)
马亚恩, 有一个非常肮脏但非常简单和最明显的解决方案。大约30秒但是,只有在您可以轻松地更新PROD中的代码以及临时阻止他人运行DAG的功能时,这才有可能。 只是评论要跳过的任务
'#task1>任务2>
task3> task4
一个更严肃的解决方案,但需要更多努力,可能是基于start_from_task参数动态创建DAG,在这种情况下,将使用此参数来构建依赖项。可以使用Admin ==> Variables菜单在UI中更改参数。您可能还可以使用前一个变量的导出时间的另一个变量。例如-DAG将忽略task1和task2直到14:05:30,然后将运行整个DAG。
答案 3 :(得分:0)