Airflow 變數

Python 中的 Apache Airflow 入門

Mike Metzger

Data Engineer

什麼是變數?

  • 用於設定值
  • 檔案路徑、API 端點、環境等
  • 可從工作查詢,透過程式碼、Airflow UI 或檔案設定
  • 存在於 DAG 程式碼之外
Python 中的 Apache Airflow 入門

在 Airflow UI 存取變數

  • 透過「Admin: Variables」選單

打開 Admin 選單並顯示 Variables 選項的 Airflow UI

Python 中的 Apache Airflow 入門

在 Airflow UI 檢視變數

Airflow Variables 頁面,清單為空且未定義變數

Python 中的 Apache Airflow 入門

在 Airflow 新增變數

Airflow Variables 頁面,高亮「Add Variable」按鈕

Python 中的 Apache Airflow 入門

變數編輯器

Airflow 變數編輯器表單,包含 key、value 與 description 欄位

Python 中的 Apache Airflow 入門

UI 中的現有變數

Airflow Variables 頁面,清單中顯示 1 個已定義變數

Python 中的 Apache Airflow 入門

在 Python 讀取變數

  • 使用 airflow.sdk.Variable 函式庫
  • 透過 Variable.get("variable_name") 讀取
    # Retrieve a plain string value
    my_region = Variable.get("region")
    
  • 在此例中,my_region 會是 us-eastern
  • 若變數不存在可提供後備值
    # Provide a fallback if the variable doesn't exist
    env = Variable.get("current_environment", default=None)
    
  • 因為未定義 current_environmentenvNone
Python 中的 Apache Airflow 入門

在 Jinja 範本存取變數

  • 可透過 {{ var.value.variable_name }} 存取
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ var.value.region }}/input.csv",
    ...
    
  • 在我們的例子中,FileSensor 會尋找檔案:/data/us-eastern/input.csv
Python 中的 Apache Airflow 入門

透過 CLI 存取變數

  • 可透過命令列讀取、更新、刪除或列出變數
  • 讀取:airflow variables get <variable_name>
  • 寫入:airflow variables set <variable_name> <value>
  • 刪除:airflow variables delete <variable_name>
  • 列出:airflow variables list <variable_name>
Python 中的 Apache Airflow 入門

JSON 變數

  • 變數值可為 JSON 字串
    • Variable.get("variable_name", deserialize_json=True)
    • 會回傳 Python 字典
  • 在 Jinja 中
    • {{ var.json.variable_name }}
Python 中的 Apache Airflow 入門

設定變數

  • 也可以設定變數
  • 使用 Variable.set("variable_name", variable_value)
  • 也可搭配 serialize_json=True 處理 JSON
  • 謹慎使用,否則可能影響其他存取變數的 DAG,產生預期外影響
Python 中的 Apache Airflow 入門

一起來練習吧!

Python 中的 Apache Airflow 入門

Preparing Video For Download...