如何在气流中动态调整DAG

时间:2018-07-13 10:12:39

标签: airflow

我有一个自定义DAG(即将被子类化),我们将其命名为MyDAG。在__enter__方法中,我想基于子类DAG添加(或不添加)运算符。我对使用BranchPythonOperator不感兴趣。

class MyDAG(DAG):
    def __enter__(self, context):
         start = DummyOperator(taks_id=start)
         end = DummyOperator(task_id=end)
         op = self.get_additional_operator()

         if op:
            start >> op
         else:
             start >> end
         retrun self
     def get_additional_operator(self):
         # None if the subclass doesn't add any operator. A reference to another operator otherwise

如果get_additional_operator返回一个引用,则说明我获得了这个形状(两个分支):

* start --> op
* end

否则,如果它返回None,我就可以得到它(一个分支):

* start --> end

如果end不返回MyDAG,我想要的是get_additional_operator继承的子类中根本没有None,如下所示:

* start --> op

而不是我在上面获得的两个分支。

1 个答案:

答案 0 :(得分:0)

气流以某种方式解析了__enter__子类的MyDAG方法中声明的每个运算符。根据该假设,为了没有运算符,只需要在正确的位置声明该运算符即可。下面的代码:

class MyDAG(DAG):
    def __enter__(self, context):
         start = DummyOperator(taks_id=start)
         op = self.get_additional_operator()

         if op:
            start >> op
         else:
             end = DummyOperator(task_id=end)
             start >> end
         retrun self
     def get_additional_operator(self):
         # None if the subclass doesn't add any operator. A reference to another operator otherwise

end节中进行else运算符的声明。我认为只有在else被评估为true时,它才会被解析。