气流:如何在自定义操作员上访问{{执行日期}}?

时间:2020-01-30 09:25:54

标签: python python-3.x google-cloud-platform airflow google-cloud-composer

我在Airflow上构建了一个自定义运算符,该运算符调用API来获取数据,然后将其写入BigQuery。但是,问题是我必须将执行日期宏作为API参数传递,才能调用该日期的数据。可悲的是,当我尝试执行此操作时,我的操作员无法解析我通过的Jinja模板。当我检查日志记录后,它仅显示模板,如下图所示。 希望你们能帮上忙。

Airflow Logs

这是我的自定义运算符和dag的代码。谢谢!

                 ...
class MyOperator(BaseOperator):

     def __init__(self,date):
          super(MyOperator,self).__init__(*arg,**kwargs)

          self.date = date

     def __pull_from_api(self):
          api_link = "somelink.com/api/date={}".format(self.date)
          data = request.get(api_link).json()
          return data

     def execute(self,context):
          data = self.__pull_from_api()

                 ...


dag = DAG('My Pipeline', default_args=default_args)

t1 = MyOperator(date='{{ execution_date}}', task_id='my_pipeline_1', dag=dag)
t1

2 个答案:

答案 0 :(得分:0)

我建议您看看PythonOperatorcontext dictionary。在Composer中使用变量时,两者都非常有用。

首先,由于您已经拥有自定义运算符,因此我强烈建议您看看here。有一些使用Airflow的常见宏和模板。因此,您可以找出可能会出错的地方。

答案 1 :(得分:0)

最好的方法是从已传递给execute(self,context)的上下文中获取执行日期。

例如,在这里我设置执行日期的字符串表示形式:

self.execution_date_str = context["execution_date"].strftime("%Y-%m-%d")

Example in LatestOnlyOperator