Templating ด้วย Jinja

Apache Airflow เบื้องต้นด้วย Python

Mike Metzger

Data Engineer

Template คืออะไร?

  • รูปแบบที่กำหนดไว้ล่วงหน้า ให้ Airflow แทนที่ข้อมูลโดยอัตโนมัติ
  • มักเป็นไฟล์ข้อความธรรมดา
  • เข้าถึงและนำกลับมาใช้ซ้ำได้ง่าย

 

ภาพประกอบ template ที่มี placeholder สำหรับแทนที่ค่า

Apache Airflow เบื้องต้นด้วย Python

Jinja คืออะไร?

  • ภาษา templating แบบข้อความที่เรียบง่าย
  • ใช้งานได้กับเครื่องมืออื่นนอกจาก Airflow
  • {{ ... }} แทนการแทนที่ค่าใน template
    • คล้ายกับ f-string ของ Python
  • ยืดหยุ่นกว่า รองรับ for loop

ภาพประกอบ Jinja template ที่ใช้การแทนที่ด้วยวงเล็บปีกกาคู่

Apache Airflow เบื้องต้นด้วย Python

ฟังก์ชัน Jinja ของ Airflow

  • logical_date: วันที่ Dag run ทำงาน
  • ds: logical_date ในรูปแบบ YYYY-MM-DD
  • logical_date.year, logical_date.month, logical_date.day: เข้าถึงส่วนประกอบของวันที่
  • params: พารามิเตอร์รันไทม์ของ Dag run
  • รองรับการคำนวณ, loop และอื่นๆ
    • macros.ds_add: ใช้คำนวณวันที่
Apache Airflow เบื้องต้นด้วย Python

ตัวอย่างการใช้ 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!
Apache Airflow เบื้องต้นด้วย Python

ตัวอย่างการใช้ FileSensor

  • กำหนด filepath แบบ dynamic
  • ค้นหาไฟล์จากวันก่อนหน้า ds (logical_date ในรูปแบบ YYYY-MM-DD)
  • ใช้ macros.ds_add
    filewatcher = FileSensor(
    task_id="wait_for_files",
    filepath="/data/{{ macros.ds_add(ds, -1) }}/input.csv",
    ...
    )
    
  • ถ้า ds คือ 2026-04-30 filepath จะเป็น /data/2026-04-29/input.csv
Apache Airflow เบื้องต้นด้วย Python

ข้อควรรู้เกี่ยวกับ Jinja

  • ใช้ได้ไม่ทุกที่
  • ตรวจสอบเอกสารสำหรับแอตทริบิวต์ที่รองรับ templating
  • ดูที่ code view

มุมมอง code view ของ Airflow Dag แสดงซอร์ส Python แบบอ่านอย่างเดียวที่ใช้กำหนด Dag

Apache Airflow เบื้องต้นด้วย Python

มาฝึกกันเถอะ!

Apache Airflow เบื้องต้นด้วย Python

Preparing Video For Download...