如何在EmailOperator任务的文件名中添加模板变量? (气流)
我似乎无法得到这个工作。如何在EmailOperator任务的文件名中添加模板变量? (气流)
我想每天发送一个给定的文件,其名称类似于'file _ {{ds_nodash}}。csv'。
问题是,我似乎无法将此名称添加为文件名,因为它似乎无法使用。在电子邮件或主题的文本完美,而不是名称。
这里是DAG作为一个例子:
local_file = 'file-{{ds_nodash}}.csv'
send_stats_csv = EmailOperator(
task_id='send-stats-csv',
to=['[email protected]'],
subject='Subject - {{ ds }}',
html_content='Here is the new file.',
files=[local_file],
dag=dag)
错误代码: 没有这样的文件或目录:u'file - {{ds_nodash}} CSV”
如果我写它的字面,在给定的日期,它的工作完美无瑕。
我在哪里错了?我应该怎么做呢?
任何帮助,将不胜感激。
谢谢。
P.D.从airflow的文档复制粘贴 - “Airflow引擎默认传递一些可在所有模板中访问的变量”。 https://airflow.incubator.apache.org/code.html
如果我理解正确,这些变量可以在执行中访问,所以如果我正在执行dag,应该找到该文件是正确的?我已经尝试过测试任务或者回填DAG,但没有成功。
气流操作符定义了什么字段是模板字段。对于EmailOperator,只有主题和html_content字段被设置为模板。
class EmailOperator(BaseOperator):
...
template_fields = ('subject', 'html_content')
template_ext = ('.html',)
参见:https://airflow.incubator.apache.org/_modules/email_operator.html
从气流疑难杂症的页面(https://gtoonstra.github.io/etl-with-airflow/gotchas.html)
不在运营商所有参数模板,所以你不能使用神社模板无处不在。该神社的模板只为它在template_fields的上市运营商在这些领域的工作...
为了得到这个工作,你就必须获得来自EmailOperator一个新的类,并在模板中添加对文件阵列。
嗯,只是一个尝试我看ds_nodash是一个模板变量。可能你需要在'ds_nodash'之前和之后给出空格,它会是这样的:'file-{{ ds_nodash }}.csv'
真棒,所以我想做一个新的emailOperator和扩展现有的将工作,对不对?谢谢!!! :)很好地解释。 –