代码之家  ›  专栏  ›  技术社区  ›  Alberto C.

如何在EmailOperator任务的文件名中添加模板变量?(气流)

  •  7
  • Alberto C.  · 技术社区  · 7 年前

    我试图每天发送一个给定的文件,其名称类似于“file{{ds\u 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)
    

    我哪里错了?我该怎么办?

    谢谢

    P、 D.复制airflow文档中的粘贴-“默认情况下,airflow引擎会传递一些在所有模板中都可以访问的变量”。 https://airflow.incubator.apache.org/code.html

    如果我理解正确,这些变量在执行时是可以访问的,那么如果我正在执行dag,文件应该找到了吗?我试过测试任务或回填dag,但都没有成功。

    2 回复  |  直到 7 年前
        1
  •  8
  •   JRam    7 年前

    气流操作符定义哪些字段是模板字段。对于EmailOperator,只有主题和html_内容字段设置为模板。

    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 )

    并不是操作符中的所有参数都是模板化的,所以不能到处使用Jinja模板。Jinja模板仅适用于在template_字段中列出的运算符中的字段。。。

        2
  •  0
  •   Chengzhi    7 年前

    好的,只是一个尝试,我看到ds\u nodash是一个模板变量。可能您需要在“ds\u nodash”之前和之后提供空格,它将类似于: 'file-{{ ds_nodash }}.csv'