Lập lịch Dag

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

Mike Metzger

Data Engineer

Dag Run

  • Một bản chạy cụ thể của workflow tại một thời điểm
  • Có thể chạy thủ công hoặc theo schedule
  • Lưu trạng thái cho mỗi workflow và task bên trong
    • running
    • failed
    • success
1 https://airflow.apache.org/docs/stable/scheduler.html
Giới thiệu về Apache Airflow bằng Python

Trang Dag Runs

Trang Dag Runs của Airflow liệt kê các lần chạy gần đây trên mọi Dag

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

Trạng thái Dag Runs

Trang Dag Runs của Airflow hiển thị cột trạng thái cho từng lần chạy

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

Chi tiết lịch

Khi lập lịch cho một Dag, cần lưu ý:

  • start_date - Thời điểm lên lịch chạy Dag lần đầu
  • end_date - Tùy chọn, thời điểm dừng tạo Dag mới
    • start_dateend_date dùng đối tượng datetime(year, month, day), ví dụ:
       from pendulum import datetime
       start_date=datetime(2026, 4, 10, tz="UTC")
      
Giới thiệu về Apache Airflow bằng Python

Lịch chạy

schedule thể hiện:

  • Tần suất chạy Dag
  • Trong khoảng start_date đến end_date
  • Định nghĩa bằng cú pháp cron, preset sẵn có, hoặc timedelta.
Giới thiệu về Apache Airflow bằng Python

Cú pháp cron

Sơ đồ cú pháp cron với 5 trường thời gian cách nhau bằng dấu cách

  • Theo định dạng cron của Unix
  • 5 trường, ngăn cách bằng dấu cách
  • * nghĩa là mọi khoảng lặp (vd: mỗi phút, mỗi ngày)
  • Có thể dùng danh sách giá trị, phân tách bằng dấu phẩy trong từng trường
Giới thiệu về Apache Airflow bằng Python

Ví dụ cron

Sơ đồ cú pháp cron với 5 trường thời gian cách nhau bằng dấu cách

0 12 * * *              # Chạy hàng ngày lúc 12:00
* * 25 2 *              # Chạy mỗi phút vào ngày 25/02
0,15,30,45 * * * *      # Chạy mỗi 15 phút
Giới thiệu về Apache Airflow bằng Python

Preset của Airflow scheduler

Preset:

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

cron tương đương:

  • 0 * * * *
  • 0 0 * * *
  • 0 0 * * 0
  • 0 0 1 * *
  • 0 0 1 1 *
1 https://airflow.apache.org/docs/stable/scheduler.html
Giới thiệu về Apache Airflow bằng Python

Preset đặc biệt

Airflow có ba preset schedule đặc biệt:

  • None - Không lập lịch, dùng cho Dag kích hoạt thủ công
  • @once - Chạy một lần
  • @continuous - Chạy ngay sau khi lượt trước kết thúc
Giới thiệu về Apache Airflow bằng Python

timedelta

  • Cũng có thể dùng pendulum.duration
  • duration(hours=6)
  • duration(minutes=30)
from pendulum import duration

@dag(
  dag_id="example_dag"
  schedule=duration(days=2)
)
Giới thiệu về Apache Airflow bằng Python

Áp dụng lịch

  • Lịch được khai báo trên Dag
  • Dùng tham số schedule:
@dag(
  dag_id="example_dag",
  schedule="0 12 * * *"
)
@dag(
  dag_id="example_dag",
  schedule="@daily"     
)
Giới thiệu về Apache Airflow bằng Python

Vấn đề lịch chạy

Khi lập lịch cho một Dag, Airflow sẽ:

  • Yêu cầu trôi qua trọn một khoảng lặp sau start_date
  • Lên lịch tại start_date + schedule
'start_date': datetime(2026, 2, 25, tz="UTC")
'schedule': @daily

Thời điểm sớm nhất để chạy Dag là 26/02/2026

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

Ayo berlatih!

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

Preparing Video For Download...