伙计们,对Airflow来说还很新。我试图将start_date
和end_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_date
和end_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) }}
的形式进行模板化,这里试图获取这些宏的实际值在此处进行模板化。我在这里做错什么吗?高度重视任何投入。
答案 0 :(得分:0)
因此,请更多地研究模板在Airflow中的工作方式。只有params
会被其值替换的一遍。在我的情况下,params
即start_date
和end_date
本身就是模板,这意味着它们将被其相应的宏定义(即{{ macros.my_plugin.start_date(execution_date) }}
)取代,但不会被这些{ {1}},例如macros
。在进行一些试运行时,我发现我实际上不必将2019-10-10
和start_date
作为参数传递给end_date
。我可以将模板PostgresOperator
和start_date
模板化到我的Sql文件中,作为模板化这些变量的初始步骤的一部分,它们将被表示为end_date
的相应值所代替。
希望这将对将来像我一样macros
中的模板制作新手有所帮助。