繁体   English   中英

“成功”dag 跳过任务 apache airflow

[英]"success" dag in skipped task apache airflow

当我的 dag中至少有 1 个跳过的任务时,它向我表明 dag 是“成功的”

在此处输入图像描述

我正在使用松弛警报及其与 airflow 的集成。

我正在寻找一个 function,如果至少有 1 个任务将被跳过,那么 dag 将“失败”(红色圆圈),它会向我的频道发送警报。 顺便说一下,我正在使用DatabricksRunNowOperator

谢谢大家!

我正在寻找一个 function,如果至少有 1 个任务将被跳过,那么 dag 将“失败”(红色圆圈),它会向我的频道发送警报。

我假设您需要设置以更正任务之间的触发规则,以便当至少一个任务失败时,整个 DAG 运行将失败state。

然后您可以连接到on_failure_callback (附加在 DAG 级别)以发送警报 - 除非您以不同的方式完成它,否则您可以忽略此建议。

Airflow 通过检查工作流的叶节点来考虑 DagRun state。 如果叶节点成功,则您的 DagRun 被标记为成功。 要实现您的目标,您需要向工作流程添加一个叶任务,该任务将检查您设置的条件,如果满足,任务将失败。

from contextlib import closing

import pendulum

from airflow import models, settings
from airflow.decorators import dag, task
from airflow.exceptions import AirflowSkipException, AirflowException
from airflow.operators.empty import EmptyOperator
from airflow.utils.state import State


@dag(dag_id="my_test_dag", start_date=pendulum.datetime(2023, 1, 1, tz="UTC"),
     schedule=None, catchup=False)
def generate_dag():
    start_task = EmptyOperator(task_id="task1")

    @task()
    def task2():
        raise AirflowSkipException

    @task()
    def task3():
        return

    @task(trigger_rule='all_done')
    def final_task(**context):
        with closing(settings.Session()) as session:
            count = session.query(
                models.TaskInstance
            ).filter(
                models.TaskInstance.dag_id == context["dag"].dag_id,
                models.TaskInstance.execution_date == context["logical_date"],
                models.TaskInstance.state == State.SKIPPED).count()
            print(f"number of tasks in skipped status is {count}")
            if count > 0:
                raise AirflowException("Number of skipped tasks in DagRun > 0")

    start_task >> [task2(), task3()] >> final_task()


dag = generate_dag()

会给你:

在此处输入图像描述

记录final_task

在此处输入图像描述

我想指出,在我看来, Skip是任务的有效状态。 如果您将Skip视为失败,这可能会产生奇怪的用例,就像您现在面临的那样,迫使您找到解决方法来解决您一开始不应该面对的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM