iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0

接下來,說說 Variable 的一些用法,先從簡單的開始

Web UI

在 web 介面裡有一個地方可以設定,如圖所示

AdminVariables

Untitled

接下來就能看到相關的介面,很直覺

Untitled

按下 + 號就能新增 variable,設定 key、val、跟說明

Untitled

在 Actions 裡面,也有 Delete 跟 Export 功能。可以讓我們將已存在的 variable 做批次的刪除或是匯出。

Untitled

有匯出當然就有匯入,這裡的匯出預設是 json 格式,我們可以將開發環境中的 variable 先匯出,等到正式環境時再做點小修改後匯入。

新增 variable 時,val 有兩種寫法。第一種就直接寫,你可以寫 int 數字、string 字串,或是 True / False。

第二種就要稍微懂一點 json,例如你可以輸入

{
  "vInt": 1,
  "vStr": "abc"
}

在 DAG 使用時會略有不同。以下分開說明

Value

如果是直接寫一級變數,在 DAG 內可以這樣寫:

Variable.get("KEY", "I'm default")

或是用樣板模式

{{var.value.KEY}}

這樣就能取得了,個人比較喜歡第一種能設定 default 值的,不過有時候樣板也是很好用

Json

如果是寫 json 格式的話,要調整一點小地方

Variable.get("KEY2", '[1,2,3]',``deserialize_json=True)

或是用樣板模式

{{var.json.KEY2}}

這樣的話,你取得的時候就會先經過 json 轉換成 object,這個適用於比較多層的變數或是 array。

CLI

在 terminal 內,我們可以下指令去控制 Variable

airflow variables -h

可以看到有哪些相關的指令可以使用

  • get Get variable
  • import Import variables
  • list List variables
  • set Set variable
  • export Export variables

可以看到跟 web 介面功能大同小異。但知道有這些指令可以下,之後在做 CI/CD 時可以做點手腳讓不同環境的變數可以部署時自動匯入,減少人為操作。

小結

我個人建議 json 只用在 array 上,其他的 variable 盡量使用 value 的單層寫法。原因有兩個:

一、維護簡單:json 雖然易讀但不代表就易寫,真的要修改的時候可能不小心就把格式改壞了。

二、強迫單純:Variable 這種全域物件就像 static 一樣,不是一個太好的 pattern。誠然有時候確實有依環境不同設定的情境,但寫得太過複雜,會讓人有慣性將參數放在裡面,而不是好好的設計物件架構。


上一篇
Airflow PythonOperator(二) - Day6
下一篇
Airflow Connection 設定跟使用 - Day8
系列文
用 Airflow & Flink 來開發 ETL 吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言