Airflow 对于没有时间触发的气流操作员,是否有任何触发规则(需要

Airflow 对于没有时间触发的气流操作员,是否有任何触发规则(需要,airflow,airflow-operator,Airflow,Airflow Operator,我有一个用例来创建BigqueryOperator的两个任务,它们具有相同的目标表,但我需要每天运行一个任务,并且在需要时手动运行第二个任务 下面是树状视图的图示 | task_3rd_adhoc | task_3rd |---- task_2nd |---- task_1st_a |---- task_1st_b 从上面的例子来看,DAG每天都在运行。我的目标是: task_1st_a和task_1st_b首先运行。目标表为: project.data

我有一个用例来创建BigqueryOperator的两个任务,它们具有相同的目标表,但我需要每天运行一个任务,并且在需要时手动运行第二个任务

下面是树状视图的图示

 | task_3rd_adhoc
 | task_3rd
 |---- task_2nd
        |---- task_1st_a
        |---- task_1st_b
从上面的例子来看,DAG每天都在运行。我的目标是:

  • task_1st_a和task_1st_b首先运行。目标表为:
    • project.dataset.table_1st_a,其中_PARTITIONTIME=执行日期,以及
    • project.dataset.table_1st_b,其中_PARTITIONTIME=执行日期
  • 然后,在task_1st_a和task_1st_b完成后,task_2nd_a将运行。BigQueryOperator使用TriggerRule.ALL_SUCCESS。目标表为:
    • project.dataset.table_2nd,其中_PARTITIONTIME=执行日期
  • 任务2成功后,任务3将运行。BigQueryOperator使用TriggerRule.ALL成功。目标表为:
    • project.DATASE.table_3rd,从执行日期算起,分区时间=D-2
  • task_3rd_adhoc将不会在日常作业中运行。当我要用目标表回填表project.dataset.table_3rd时,我需要它:
    • project.dataset.table第3页,其中_PARTITIONTIME=执行日期
  • 但我仍然找不到上面第4步的正确触发规则。我尝试了TriggerRule.DUMMY,因为我认为它可以用来设置无触发,但当我尝试创建上面的DAG时,task#u 3rd_adhoc也在日常作业中运行。
    (基于依赖关系只是为了显示,随意触发)

    首先,您误解了
    TriggerRule.DUMMY

    • 通常,当您将任务连接到一起时,b将仅在a完成后运行(根据b的
      触发规则,成功/失败)
    • TriggerRule.DUMMY
      意味着即使像以前一样将任务A和B连接在一起,B也会独立于A运行(随意运行)。这并不意味着按照你的意愿运行,而是按照气流的意愿运行(它会随时触发)因此,显然,具有虚拟触发器规则的任务几乎总是在不可预测的时间运行

    在这里,您需要(始终在DAG中有一个特定的任务,但仅在手动指定时运行它)是

    以下是您大致可以做到的

    • 变量
      应包含此任务的命令(无论是否应运行)。当然,您可以随时从UI编辑此变量(从而控制该任务是否在下一次运行中运行)
    • 在操作符的代码中(
      execute()
      methodforcustomoperator,或者在
      PythonOperator
      的情况下只需
      python\u callable
      ),您将检查变量的值(无论任务是否应该运行)
    • 根据变量值,如果任务不应该运行,则必须抛出一个
      AirflowskipeException
      ,这样任务才会运行。否则,它将照常运行