【问题标题】:Airflow - Skip future task instance without making changes to dag fileAirflow - 跳过未来的任务实例而不更改 dag 文件
【发布时间】:2020-06-12 16:03:26
【问题描述】:
  • 我有一个 DAG 'abc' 计划在 CST 每天早上 7 点运行,并且该 DAG 中有任务 'xyz'。

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


我怎样才能跳过那个特定的任务实例?

  • 我不想对代码进行任何更改,因为我无权访问 Prod 代码并且任务现在处于 Prod 环境中。
  • 有没有办法使用命令行来做到这一点?

感谢您对此的任何帮助。

【问题讨论】:

  • 我想不出任何优雅的解决方案。您可以在 Airflow 元数据库中设置 触发器。一旦任务xyz 即将开始并且使用state=RUNNING 进行task_instance 条目,触发器应立即将状态更新为SUCCESS or SKIPPED(取决于您的用例)。这可能会奏效,但在投入生产之前一定要测试一次

标签: airflow


【解决方案1】:

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

假设,有一个 ID 为 a_dag 的 DAG 和三个 ID 为 dummy1dummy2dummy3 的任务。我们想从下一次 DAG 运行中跳过 dummy3 任务。

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

$ airflow next_execution a_dag
2020-06-12T21:00:00+00:00

然后我们将dummy3标记为在这个执行日期成功:

$ 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

【讨论】:

  • 感谢@SergiyKolesnikov 的回复。假设有另一个名为 dummy4 的任务,依赖关系如下 - dummy1->dummy2->dummy3->dummy4。根据您的命令,当我们将 dummy3 标记为成功时,dummy4 立即开始运行。其实我想把 dummy3 放在 HOLD 上,这样下游任务(dummy4)就不会运行。你能帮我解决这个问题吗?很抱歉造成混乱。
  • @AfzAbd 您可以按照我描述的方式将 dummy4(和任何其他下游任务)标记为成功。
  • 谢谢@SergiyKolesnikov。这会有所帮助。有没有办法在将 dummy3 任务标记为成功时包含下游任务。这样包括 dummy4 在内的所有下游任务都将处于成功状态。我要 HOLD 的任务有很多下游任务。为所有下游任务单独手动运行命令不是一个好选择,对吧?
  • @AfzAbd 如果答案帮助您随时接受它。对于多个任务,您可以收集它们的 ID 并编写一个 bash 循环来为每个任务运行命令。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多