Dependencies 外部任务传感器执行\u日期\u fn

Dependencies 外部任务传感器执行\u日期\u fn,dependencies,task,airflow,sensors,directed-acyclic-graphs,Dependencies,Task,Airflow,Sensors,Directed Acyclic Graphs,我想在我的dag中的外部任务传感器中使用execution_date_fn使其依赖于上一个实例(我不想使用depends_on_pass参数)。有人能告诉我如何使用“执行日期”获取同一dag的先前执行id,这样我就不必在“执行时间”中指定小时/分钟。不确定以下方法“prev_execution_date_1”是否正确。谢谢你在这方面的帮助 def prev_execution_date_1(**kwargs): dr = self.get_dagrun(session=session)

我想在我的dag中的外部任务传感器中使用execution_date_fn使其依赖于上一个实例(我不想使用depends_on_pass参数)。有人能告诉我如何使用“执行日期”获取同一dag的先前执行id,这样我就不必在“执行时间”中指定小时/分钟。不确定以下方法“prev_execution_date_1”是否正确。谢谢你在这方面的帮助

def prev_execution_date_1(**kwargs):
    dr = self.get_dagrun(session=session)
    previous_scheduled_date = dr.previous_schedule(self.execution_date)
    return previous_scheduled_date


    external_0 = ExternalTaskSensor(
            task_id='Check_Previous_Instance',
            external_task_id=None,
            external_dag_id='dag_abc_1',
            allowed_states=['success'],
            execution_date_fn=prev_execution_date_1,
            dag=dag
    )

execution_date_fn用于根据当前执行日期计算所需的执行日期如果执行增量未通过,在当前稳定版本1.10中,有参数检查,它最多接受2个参数,上下文['execution_date']和上下文。并且上下文不包含会话,所以您无法在其中查询数据库。您可以尝试从airflow.settings导入会话,但这不是一个好主意

例如:

lambda dt: dt + timedelta(days=1)

如果您的计划程序间隔没有频繁更改,那么使用执行增量是一种相对简单的方法。

我得到了答案,想到了在这里发布它,它可能会帮助一些人

下面的方法将根据我提到的if条件返回执行id。在这个方法中,您可以看到如果它满足条件,它将在2天前返回执行id,否则将返回昨天的执行id

def prev_execution_dt(execution_date, **kwargs):
    weekday=execution_date.strftime('%A')
    print(weekday)
    if weekday == "Thursday":
        execution_dt_derived=execution_date - timedelta(hours=72)
        print(execution_dt_derived)
    else:
        execution_dt_derived=execution_date - timedelta(hours=24)
        print(execution_dt_derived)
    return execution_dt_derived