Airflow 气流-跳过未来任务实例而不更改dag文件

Airflow 气流-跳过未来任务实例而不更改dag文件,airflow,Airflow,我有一个DAG“abc”计划在CST每天早上7点运行,该DAG中有任务“xyz” 出于某种原因,我不想为明天的实例运行其中一个任务“xyz” 如何跳过该特定任务实例 我不想对代码进行任何更改,因为我没有访问Prod代码的权限,并且任务现在位于Prod环境中 使用命令行有什么方法可以做到这一点吗 感谢您在这方面的帮助。您可以使用运行命令将不需要的任务标记为成功。标记为成功的任务将不再运行 假设有一个ID为a_DAG的DAG和三个ID为dummy1,dummy2,dummy3的任务。我们希望

我有一个DAG“abc”计划在CST每天早上7点运行,该DAG中有任务“xyz”

  • 出于某种原因,我不想为明天的实例运行其中一个任务“xyz”


  • 如何跳过该特定任务实例

    • 我不想对代码进行任何更改,因为我没有访问Prod代码的权限,并且任务现在位于Prod环境中
    • 使用命令行有什么方法可以做到这一点吗

    感谢您在这方面的帮助。

    您可以使用
    运行
    命令将不需要的任务标记为成功。标记为成功的任务将不再运行

    假设有一个ID为
    a_DAG
    的DAG和三个ID为
    dummy1
    dummy2
    dummy3
    的任务。我们希望从下一次DAG运行中跳过
    dummy3
    任务

    首先,我们得到下一个执行日期:

    $ airflow next_execution a_dag
    2020-06-12T21:00:00+00:00
    
    $ airflow run -fAIim a_dag dummy3 '2020-06-12T21:00:00+00:00'
    
    然后我们将此执行日期的
    dummy3
    标记为成功:

    $ airflow next_execution a_dag
    2020-06-12T21:00:00+00:00
    
    $ airflow run -fAIim a_dag dummy3 '2020-06-12T21:00:00+00:00'
    
    当然,我们可以检查任务状态。对于跳过的任务,它将是
    success

    $ airflow task_state a_dag dummy3 '2020-06-12T21:00:00+00:00'
    ...
    success
    
    对于其余任务,状态将为
    None

    $ airflow task_state a_dag dummy1 '2020-06-12T21:00:00+00:00'
    ...
    None
    

    我想不出任何优雅的解决办法。您可以在数据库中设置触发器。一旦任务
    xyz
    即将启动并且它的
    task\u实例
    条目是使用该触发器创建的,则应立即将状态更新为(取决于您的用例)。这可能会奏效,但在投入产品之前一定要测试一次谢谢@SergiyKolesnikov的回复。假设有另一个名为dummy4的任务,依赖项如下-dummy1->dummy2->dummy3->dummy4。根据您的命令,当我们将dummy3标记为成功时,dummy4立即开始运行。实际上我想暂停dummy3,这样它的下游任务(dummy4)就不会运行了。你能帮我一下吗?抱歉造成混淆。@AfzAbd您可以按照我描述的相同方式将dummy4(以及任何其他下游任务)标记为成功。谢谢@SergiyKolesnikov。那会有帮助的。在将dummy3任务标记为成功时,是否有任何方法包括下游任务。这样所有下游任务(包括dummy4)都将处于成功状态。对于我想要保留的任务,有许多下游任务。为所有下游任务单独手动运行命令不是一个好选项,对吗?@AfzAbd如果答案有助于您接受它。对于多个任务,您可以收集它们的ID并编写bash循环来为每个任务运行命令。