【发布时间】:2020-08-07 12:59:42
【问题描述】:
假设我有一个任务,其中一项任务依赖于 4 个任务。仅当 dag 之前运行的相同任务成功时,才应触发所有 4 个任务。所以所有的任务都将depends_on_past 设为True。然而,dag 的最后一项任务是清理任务,应始终触发。所以在前一天的任务失败的情况下,当天的任务不会被触发,这样最后的任务也不会被触发。解决这个问题的方法是什么?
【问题讨论】:
假设我有一个任务,其中一项任务依赖于 4 个任务。仅当 dag 之前运行的相同任务成功时,才应触发所有 4 个任务。所以所有的任务都将depends_on_past 设为True。然而,dag 的最后一项任务是清理任务,应始终触发。所以在前一天的任务失败的情况下,当天的任务不会被触发,这样最后的任务也不会被触发。解决这个问题的方法是什么?
【问题讨论】:
始终在您的清理任务中设置trigger_rule=TriggerRule.ALL_DONE(那些必须始终运行的任务,无论上游任务的状态如何)
虽然您似乎已经想到了,但在您的清理任务上设置 depends_on_past=False 也可能有意义
【讨论】:
all_done 只有在上游任务被触发时才有意义,对吧?因此,如果触发了任务,则不管结果如何。如果下游任务有all_done,它将被触发。但是,在depends_on_past 的情况下,不会触发任务。所以 all_done 没有帮助。
depends_on_past):让你的任务跳过(或者失败,如果你想) 由raising AirflowSkipException or AirflowFailException 手动完成,以防之前的任务实例尚未完成(必须为此查询元数据库或利用 SQLAlchemy TaskInstance 模型)。
depends_on_past 而被卡住,就运行清理任务)违背了 Airflow 任务依赖的原则,这就是为什么我看不到任何简单的方法来实现它