UJI*_*JIN 11

嗯,我想说的是,它们是完全不同的概念,它们可以独立使用。确实,它们都可以用于防止回填,但如果这是您唯一关心的问题,那么只需使用catchup=False. 引用一位 Airflow 开发人员的回复,实际上,好的做法似乎很明显:

作为latestOnlyOperator 的作者,目标是作为权宜之计,直到catchup=False 着陆。

但他接着说LatestOnlyOperator应该弃用。我不同意(因为两者的用户catchup=False LatestOnlyOperator),我会尽力解释。我对这两个概念的直觉是这样的:


追赶=真

在 DAG 定义中(即当您指定它时default_args),您可以将标志设置catchupTrue。如果将此标志True设置为 并将 DAG 设置为 ON,则调度程序将为从start_date“现在”到“当前”的每个调度间隔创建 DAG 运行,并将按顺序执行它们。引用文档

如果取而代之的是该dag.catchupTrue,则调度程序将为 2015-12-01 和 2016-01-02 之间的每个完成的间隔创建一个 DAG 运行(但对于 2016-01-02 还不是一个,因为该间隔尚未完成) 并且调度程序将按顺序执行它们。


最新唯一运营商

ALatestOnlyOperator是 的扩展BaseOperator。如果 DAG 运行不在最新的调度间隔内(即“最后一次运行”),则使用此 Operator 创建的任务将不会运行(即将被跳过,并且还将跳过下游任务)。还引用了LatestOnlyOperator文档字符串:

"""
Allows a workflow to skip tasks that are not running during the most
recent schedule interval.

If the task is run outside of the latest schedule interval, all
directly downstream tasks will be skipped.

Note that downstream tasks are never skipped if the given DAG_Run is
marked as externally triggered.
"""
Run Code Online (Sandbox Code Playgroud)

结论

您可以使用catchup=True和定义您的计划 DAG,LatestOnlyOperator以确保在追赶运行期间不会执行某些任务。此外,LatestOnlyOperator如果您想重新运行一些过去的 DAG 运行(例如通过在 UI 中清除它们),但您有一些任务(例如正在发送的通知)想要在这些重新运行期间跳过,则可以使用。