Tạo mẫu với Jinja

Giới thiệu về Apache Airflow bằng Python

Mike Metzger

Data Engineer

Template là gì?

  • Một định dạng cho phép Airflow tự động thay thế thông tin
  • Thường là văn bản / tệp văn bản
  • Đơn giản hóa truy cập và tái sử dụng

 

Minh họa mẫu với chỗ trống cho giá trị thay thế

Giới thiệu về Apache Airflow bằng Python

Jinja là gì?

  • Ngôn ngữ tạo mẫu đơn giản dựa trên văn bản
  • Dùng trong nhiều công cụ ngoài Airflow
  • {{ ... }} biểu thị phép thay thế trong mẫu
    • Tương tự f-string trong Python
  • Dùng động hơn, hỗ trợ vòng lặp

Minh họa mẫu Jinja dùng dấu ngoặc kép kép cho phép thay thế

Giới thiệu về Apache Airflow bằng Python

Hàm Jinja trong Airflow

  • logical_date: Thời điểm chạy Dag
  • ds: logical_date ở định dạng YYYY-MM-DD
  • logical_date.year, logical_date.month, logical_date.day: Truy cập thành phần ngày
  • params: Tham số runtime của lần chạy Dag
  • Tính toán, vòng lặp, v.v.
    • macros.ds_add: Cho phép tính toán ngày
Giới thiệu về Apache Airflow bằng Python

Ví dụ với SmtpNotifier

  • Thay thế trong trường 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 vào 2026-04-30 đã lỗi!
Giới thiệu về Apache Airflow bằng Python

Ví dụ với FileSensor

  • Cấu hình đường dẫn tệp động
  • Tìm tệp của ngày trước ds (logical_date ở dạng YYYY-MM-DD )
  • Dùng macros.ds_add
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ macros.ds_add(ds, -1) }}/input.csv",
    ...
    )
    
  • Nếu ds là 2026-04-30, đường dẫn sẽ là /data/2026-04-29/input.csv
Giới thiệu về Apache Airflow bằng Python

Ghi chú về Jinja

  • Không dùng được ở mọi nơi
  • Xem tài liệu về thuộc tính hỗ trợ mẫu
  • Kiểm tra chế độ xem mã

Chế độ xem mã Dag của Airflow hiển thị mã nguồn Python chỉ đọc định nghĩa Dag

Giới thiệu về Apache Airflow bằng Python

Hãy thực hành!

Giới thiệu về Apache Airflow bằng Python

Preparing Video For Download...