การตั้งเวลา Dag

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

Mike Metzger

Data Engineer

Dag Runs

  • อินสแตนซ์เฉพาะของ workflow ณ ช่วงเวลาหนึ่ง
  • รันด้วยตนเองหรือผ่าน schedule ได้
  • เก็บสถานะของแต่ละ workflow และ task ภายใน
    • running
    • failed
    • success
1 https://airflow.apache.org/docs/stable/scheduler.html
Apache Airflow เบื้องต้นด้วย Python

มุมมอง Dag Runs

หน้า Airflow Dag Runs แสดงรายการรันล่าสุดของ Dag ทั้งหมด

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

สถานะ Dag Runs

หน้า Airflow Dag Runs แสดงคอลัมน์สถานะของแต่ละการรัน

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

รายละเอียด Schedule

การตั้งเวลา Dag มีแอตทริบิวต์สำคัญดังนี้:

  • start_date - วันที่/เวลาเริ่มต้นสำหรับการรัน Dag ครั้งแรก
  • end_date - แอตทริบิวต์ทางเลือกสำหรับกำหนดเวลาหยุดสร้าง Dag อินสแตนซ์ใหม่
    • start_date และ end_date ใช้ออบเจกต์ datetime(year, month, day) เช่น:
       from pendulum import datetime
       start_date=datetime(2026, 4, 10, tz="UTC")
      
Apache Airflow เบื้องต้นด้วย Python

Schedule

schedule กำหนด:

  • ความถี่ในการรัน Dag
  • ช่วงระหว่าง start_date ถึง end_date
  • ระบุได้ผ่านไวยากรณ์ cron, preset ในตัว, หรือ timedelta
Apache Airflow เบื้องต้นด้วย Python

ไวยากรณ์ cron

ไดอะแกรมไวยากรณ์ cron แสดง 5 ฟิลด์เวลาที่คั่นด้วยช่องว่าง

  • มาจากรูปแบบ Unix cron
  • 5 ฟิลด์คั่นด้วยช่องว่าง
  • * หมายถึงรันทุกช่วงเวลา (เช่น ทุกนาที ทุกวัน)
  • ฟิลด์สามารถใช้ค่าหลายค่าโดยคั่นด้วยเครื่องหมายจุลภาค
Apache Airflow เบื้องต้นด้วย Python

ตัวอย่าง cron

ไดอะแกรมไวยากรณ์ cron แสดง 5 ฟิลด์เวลาที่คั่นด้วยช่องว่าง

0 12 * * *              # Run daily at noon
* * 25 2 *              # Run once per minute on February 25
0,15,30,45 * * * *      # Run every 15 minutes
Apache Airflow เบื้องต้นด้วย Python

Preset ของ Airflow scheduler

Preset:

  • @hourly
  • @daily
  • @weekly
  • @monthly
  • @yearly

เทียบเท่า cron:

  • 0 * * * *
  • 0 0 * * *
  • 0 0 * * 0
  • 0 0 1 * *
  • 0 0 1 1 *
1 https://airflow.apache.org/docs/stable/scheduler.html
Apache Airflow เบื้องต้นด้วย Python

Preset พิเศษ

Airflow มี preset schedule พิเศษสามแบบ:

  • None - ไม่ตั้งเวลา ใช้สำหรับ Dag ที่ trigger ด้วยตนเอง
  • @once - รันเพียงครั้งเดียว
  • @continuous - รันทันทีหลังจากการรันก่อนหน้าเสร็จสิ้น
Apache Airflow เบื้องต้นด้วย Python

timedelta

  • ใช้ pendulum.duration ได้เช่นกัน
  • duration(hours=6)
  • duration(minutes=30)
from pendulum import duration

@dag(
  dag_id="example_dag"
  schedule=duration(days=2)
)
Apache Airflow เบื้องต้นด้วย Python

การกำหนด Schedule

  • กำหนด Schedule ไว้บน Dag
  • ใช้พารามิเตอร์ schedule:
@dag(
  dag_id="example_dag",
  schedule="0 12 * * *"
)
@dag(
  dag_id="example_dag",
  schedule="@daily"     
)
Apache Airflow เบื้องต้นด้วย Python

ปัญหาเรื่อง Schedule

เมื่อตั้งเวลา Dag Airflow จะ:

  • รอให้ครบหนึ่งช่วงเวลาหลังจาก start date
  • รัน task ที่ start_date + schedule
'start_date': datetime(2026, 2, 25, tz="UTC")
'schedule': @daily

เวลาเริ่มต้นเร็วที่สุดที่ Dag จะรันคือวันที่ 26 กุมภาพันธ์ 2026

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

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

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

Preparing Video For Download...