Airflow 変数

Python で学ぶ Apache Airflow 入門

Mike Metzger

Data Engineer

変数とは?

  • 設定値の管理に便利
  • ファイルパス、APIエンドポイント、環境設定など
  • タスクからの参照、コード・UI・ファイルによる設定が可能
  • DAGコードの外部に存在
Python で学ぶ Apache Airflow 入門

Airflow UIで変数にアクセスする

  • Admin: Variables メニューから

VariablesオプションのあるAdminメニューが開いたAirflow UI

Python で学ぶ Apache Airflow 入門

Airflow UIで変数を確認する

変数が未定義の空のリストが表示されたAirflow変数ページ

Python で学ぶ Apache Airflow 入門

Airflowで変数を追加する

「変数を追加」ボタンがハイライトされたAirflow変数ページ

Python で学ぶ Apache Airflow 入門

変数エディター

キー・値・説明フィールドのあるAirflow変数編集フォーム

Python で学ぶ Apache Airflow 入門

UIに表示された変数

1つの変数が定義されたAirflow変数ページ

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_environment が未定義のため、env は None になります
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で変数にアクセスする

  • 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...