如何在 EmailOperator 任务的文件名中添加模板变量? (空气流动)
How to add template variable in the filename of an EmailOperator task? (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)
错误代码:
没有这样的文件或目录:u'file-{{ds_nodash}}.csv'
如果我按照给定的日期按字面意思写,它会完美无缺。
我哪里错了?我该怎么办?
如有任何帮助,我们将不胜感激。
谢谢。
P.D。从气流的文档中复制粘贴 - "The Airflow engine passes a few variables by default that are accessible in all templates"。 https://airflow.incubator.apache.org/code.html
如果我没理解错的话,这些变量在执行时是可以访问的,所以如果我正在执行dag,应该能找到文件吧?我已经尝试过测试任务或回填 dag,但都没有成功。
好吧,试了一下我发现 ds_nodash 是一个模板变量。可能你需要在 'ds_nodash' 之前和之后留出空格,它看起来像这样:'file-{{ ds_nodash }}.csv'
Airflow Operators 定义哪些字段是模板字段。对于 EmailOperator,只有主题和 html_content 字段被设置为模板。
class EmailOperator(BaseOperator):
...
template_fields = ('subject', 'html_content')
template_ext = ('.html',)
参见:https://airflow.incubator.apache.org/_modules/email_operator.html
来自 Airflow Gotcha 的页面(https://gtoonstra.github.io/etl-with-airflow/gotchas.html)
Not all parameters in operators are templated, so you cannot use Jinja templates everywhere. The Jinja templates only work for those fields in operators where it’s listed in the template_fields...
要使其正常工作,您必须从 EmailOperator 派生一个新的 class 并添加文件数组的模板。
我似乎无法让它工作。
我正在尝试每天发送一个给定的文件,其名称类似于 '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)
错误代码: 没有这样的文件或目录:u'file-{{ds_nodash}}.csv'
如果我按照给定的日期按字面意思写,它会完美无缺。
我哪里错了?我该怎么办?
如有任何帮助,我们将不胜感激。
谢谢。
P.D。从气流的文档中复制粘贴 - "The Airflow engine passes a few variables by default that are accessible in all templates"。 https://airflow.incubator.apache.org/code.html
如果我没理解错的话,这些变量在执行时是可以访问的,所以如果我正在执行dag,应该能找到文件吧?我已经尝试过测试任务或回填 dag,但都没有成功。
好吧,试了一下我发现 ds_nodash 是一个模板变量。可能你需要在 'ds_nodash' 之前和之后留出空格,它看起来像这样:'file-{{ ds_nodash }}.csv'
Airflow Operators 定义哪些字段是模板字段。对于 EmailOperator,只有主题和 html_content 字段被设置为模板。
class EmailOperator(BaseOperator):
...
template_fields = ('subject', 'html_content')
template_ext = ('.html',)
参见:https://airflow.incubator.apache.org/_modules/email_operator.html
来自 Airflow Gotcha 的页面(https://gtoonstra.github.io/etl-with-airflow/gotchas.html)
Not all parameters in operators are templated, so you cannot use Jinja templates everywhere. The Jinja templates only work for those fields in operators where it’s listed in the template_fields...
要使其正常工作,您必须从 EmailOperator 派生一个新的 class 并添加文件数组的模板。