2017-10-09 117 views
2

我似乎無法得到這個工作。如何在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,但沒有成功。

回答

1

氣流操作符定義了什麼字段是模板字段。對於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一個新的類,並在模板中添加對文件陣列。

+0

真棒,所以我想做一個新的emailOperator和擴展現有的將工作,對不對?謝謝!!! :)很好地解釋。 –

0

嗯,只是一個嘗試我看ds_nodash是一個模板變量。可能你需要在'ds_nodash'之前和之後給出空格,它會是這樣的:'file-{{ ds_nodash }}.csv'