我在Airflow上构建了一个自定义运算符,该运算符调用API来获取数据,然后将其写入BigQuery。但是,问题是我必须将执行日期宏作为API参数传递,才能调用该日期的数据。可悲的是,当我尝试执行此操作时,我的操作员无法解析我通过的Jinja模板。当我检查日志记录后,它仅显示模板,如下图所示。 希望你们能帮上忙。
这是我的自定义运算符和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
答案 0 :(得分:0)
我建议您看看PythonOperator和context dictionary。在Composer中使用变量时,两者都非常有用。
首先,由于您已经拥有自定义运算符,因此我强烈建议您看看here。有一些使用Airflow的常见宏和模板。因此,您可以找出可能会出错的地方。
答案 1 :(得分:0)
最好的方法是从已传递给execute(self,context)的上下文中获取执行日期。
例如,在这里我设置执行日期的字符串表示形式:
self.execution_date_str = context["execution_date"].strftime("%Y-%m-%d")