在前兩天陸續介紹了 Airflow 如何進行參數傳遞的主題,以及 XCom 的設計及使用方法。今天接續著參數的話題來談談 Airflow Variable 及 Template 的使用。
我們一樣先了解什麼是 Variable,再進行相關的實作。在前兩天當中我們談到的是如何傳遞參數給 DAG 以及怎麼在 Task 之間進行參數的溝通。我們知道除了這些動態的參數之外,有很多參數是基本上不會變動的,像是環境的參數,或是某些數值的參數,甚至還有很多情境是不同的 DAG 都會需要取得的參數。那我們就可以使用 Airflow 的 Variable 模組。Variable 可以讓我們在 Airflow 平台當中設定 Key - Value 的參數對,並在 DAG 的中取用。是一個很適合管理環境便是以及相關參數的模組。
這邊介紹兩種 Variable 的設定方法。可以依照需求與習慣進行設定。
進入 Variable 頁面之後我們點擊增加參數的按鈕進行設定。
填入參數之後點擊下方 Save 按鍵進行儲存。
回到 Variable 頁面我們就可以看到 Variable 多了一筆紀錄。表示我們成功的設定了一組紀錄。
我們可以看到 Airflow 也提供使用檔案上傳匯入參數。如果有較多的參數輸入需求,可以考慮使用檔案匯入。
export AIRFLOW_VAR_TEST=AIRFLOW
# 使用 json 參數
export AIRFLOW_VAR_TEST_JSON='{"var1":"a"}'
環境變數的使用方式需將字串的開頭設定為 AIRFLOW_VAR ,則 Airflow 能擷取相關資訊。
在 DAG 中如果我們要取得 Variable 的值來使用。我們可以透過內建 Variable 模組進行操作,首先 import Variable 模組。並使用Variable.get()取得參數值。
from airflow.models import Variable
pipeline_var = Variable.get("pipeline_var")
test = Variable.get("test", deserialize_json=True)
test_json = Variable.get("test_json", deserialize_json=True)
如果存入的格式為 json 也可以將值轉換。這樣我們就可以針對各種情境使用 Variable。
在 Airflow 的設計中, Template 是非常方便用於優雅的傳遞參數的一個方式。使用 Template 可以讓開發者直接將參數進行傳遞,不用先把參數用一個變數儲存。Template 的做法其實存在於很多地方,使用過 Django 模板的朋友,應該就會對這做法很熟悉。
那實際上該怎麼做呢? Template 以雙大括號作為識別的符號,在裡面寫入變數名稱,則可取得的變數值。
在昨天有講到的預設參數,我們可以使用 Template 取得
更多的資訊可參考官方文件
https://airflow.apache.org/docs/apache-airflow/stable/templates-ref.html
# 取得值
{{ var.value.<variable_name> }}
# 取得 json
{{ var.json.<variable_name> }}
Template 也可以使用在多種層面,有興趣的朋友可以查詢參考官方文件。透過使用 Template 可以讓我們的程式更加的簡潔優雅。
參考官方文件:
https://airflow.apache.org/docs/apache-airflow/stable/templates-ref.html
今天玩的東西十分有趣,希望大家也能夠善用 Airflow 中內建的工具,幫助自己更有效率的開發 Data pipeline!