Jinjaによるテンプレート

Python で学ぶ Apache Airflow 入門

Mike Metzger

Data Engineer

テンプレートとは?

  • Airflowが情報を自動的に置換するための定義済み形式
  • 多くはプレーンテキスト/テキストファイル
  • アクセスと再利用を簡略化

 

置換値のプレースホルダーを含むテンプレートの図

Python で学ぶ Apache Airflow 入門

Jinjaとは?

  • シンプルなテキストベースのテンプレート言語
  • Airflow以外の多くのツールで使用
  • {{ ... }} はテンプレート置換を表す
    • Pythonのf文字列に類似
  • forループなど動的な使用が可能

二重波括弧による置換を使ったJinjaテンプレートの図

Python で学ぶ Apache Airflow 入門

AirflowのJinja関数

  • logical_date: DAGの実行日時
  • ds: YYYY-MM-DD形式のlogical_date
  • logical_date.year、logical_date.month、logical_date.day: 日付の各要素にアクセス
  • params: DAG実行時のパラメーター
  • 計算、ループなど
    • macros.ds_add: 日付計算に使用
Python で学ぶ Apache Airflow 入門

SmtpNotifierの使用例

  • subjectフィールドでの置換
@dag(dag_id=`sales_etl`,
     on_failure_callback=SmtpNotifier(
         to='[email protected]',
         from_email='[email protected]',

subject='sales_etl on {{ logical_date }} has failed!' ) )
  • Subject: sales_etl on 2026-04-30 failed!
Python で学ぶ Apache Airflow 入門

FileSensorの使用例

  • ファイルパスを動的に設定
  • ds(YYYY-MM-DD形式のlogical_date)の前日のファイルを検索
  • macros.ds_addを使用
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ macros.ds_add(ds, -1) }}/input.csv",
    ...
    )
    
  • dsが2026-04-30の場合、ファイルパスは/data/2026-04-29/input.csv
Python で学ぶ Apache Airflow 入門

Jinjaに関する注意点

  • どこでも使えるわけではない
  • テンプレート対応属性はドキュメントを参照
  • コードビューで確認

DAGを定義する読み取り専用Pythonソースコードを表示するAirflow DAGコードビュー

Python で学ぶ Apache Airflow 入門

練習しましょう!

Python で学ぶ Apache Airflow 入門

Preparing Video For Download...