气流中的模板

时间:2019-10-02 15:56:19

标签: templates macros jinja2 airflow

伙计们,对Airflow来说还很新。我试图将start_dateend_date发送到我的sql脚本中,该脚本将作为任务在我的DAG中运行。我最初的方法是将它们模板化,然后通过PostgresOperator变量将其发送到param

PostgresOperator(
        task_id='test_edw_job',
        sql='sql/my.sql',
        params={'start_date': start_date, 'end_date': end_date}
    )

其中start_dateend_date是定义为

的宏
end_date = "{{ macros.my_plugin.end_date(execution_date) }}"

start_of_month = '{{ macros.my_plugin.start_date(execution_date) }}'

我的SQL文件内部正在分别以{{ param.start_date }}{{ params.end_date }}的形式访问这些变量。

但是,一旦我启动DAG并查看了渲染的任务,它会将它们以{{ macros.my_plugin.start_date(execution_date) }}{{ macros.my_plugin.end_date(execution_date) }}的形式进行模板化,这里试图获取这些宏的实际值在此处进行模板化。我在这里做错什么吗?高度重视任何投入。

1 个答案:

答案 0 :(得分:0)

因此,请更多地研究模板在Airflow中的工作方式。只有params会被其值替换的一遍。在我的情况下,paramsstart_dateend_date本身就是模板,这意味着它们将被其相应的宏定义(即{{ macros.my_plugin.start_date(execution_date) }})取代,但不会被这些{ {1}},例如macros。在进行一些试运行时,我发现我实际上不必将2019-10-10start_date作为参数传递给end_date。我可以将模板PostgresOperatorstart_date模板化到我的Sql文件中,作为模板化这些变量的初始步骤的一部分,它们将被表示为end_date的相应值所代替。

希望这将对将来像我一样macros中的模板制作新手有所帮助。