Alb*_* C. 5 python python-2.7 airflow apache-airflow
我似乎无法让这个工作.
我试图每天发送一个给定的文件,其名称类似于'file _ {{ds_nodash}}.csv'.
问题是我似乎无法将此名称添加为文件名,因为它似乎无法使用.在电子邮件的文本或主题工作完美,而不是在名称上.
这是dag的一个例子:
local_file = 'file-{{ds_nodash}}.csv'
send_stats_csv = EmailOperator(
task_id='send-stats-csv',
to=['email@gmail.com'],
subject='Subject - {{ ds }}',
html_content='Here is the new file.',
files=[local_file],
dag=dag)
Run Code Online (Sandbox Code Playgroud)
错误代码:没有这样的文件或目录:u'file - {{ds_nodash}}.csv'
如果我按字面意思写出它的给定日期,它可以完美地工作.
我哪里错了?我该怎么办呢?
任何帮助,将不胜感激.
谢谢.
来自airflow文档的PD复制粘贴 - "Airflow引擎默认传递一些可在所有模板中访问的变量".https://airflow.incubator.apache.org/code.html
如果我理解正确,这些变量在执行时是可访问的,所以如果我执行dag,应该找到正确的文件?我已经尝试过测试任务或回填dag都没有成功.
小智 7
气流操作员定义哪些字段是模板字段.对于EmailOperator,仅将subject和html_content字段设置为模板.
class EmailOperator(BaseOperator):
...
template_fields = ('subject', 'html_content')
template_ext = ('.html',)
Run Code Online (Sandbox Code Playgroud)
请参阅:https://airflow.incubator.apache.org/_modules/email_operator.html
来自Airflow Gotcha的页面(https://gtoonstra.github.io/etl-with-airflow/gotchas.html)
并非运算符中的所有参数都是模板化的,因此您无法在任何地方使用Jinja模板.Jinja模板仅适用于在template_fields中列出的运算符中的那些字段...
要使其工作,您必须从EmailOperator派生一个新类,并为files数组添加模板.