पाठ 8 / 25

Scheduling: Cron, Intervals और Catchup

Schedule चुनें, data intervals समझें और तय करें कि पिछले runs की भरपाई करनी है या नहीं।

Run उस interval के लिए है जो अभी ख़त्म हुआ

schedule को preset ("@daily", "@hourly"), cron string (रोज़ 06:00 के लिए "0 6 * * *") या timedelta पर रखें। Airflow data intervals में सोचता है: जिस दैनिक run की logical date 1 अक्टूबर है वह 1 अक्टूबर 00:00 से 2 अक्टूबर 00:00 को ढकता है और वास्तव में उस interval के ख़त्म होने के बाद, 2 अक्टूबर की आधी रात को, शुरू होता है। start_date वह समय है जब scheduling शुरू हो सकती है। catchup तय करता है कि start_date से चूके हर interval के लिए runs बनें (True) या सिर्फ़ ताज़ा (False)। catchup=True और दूर की start_date से सावधान रहें: यह एक साथ सैकड़ों runs बना सकता है।

Interval और catchup का गणित, चलाकर

मैंने यह सादी Python गणना चलाई। 1 अक्टूबर की logical date वाला run 1 से 2 अक्टूबर को ढकता है और 2 अक्टूबर 00:00 पर चलता है। start_date 1 सितंबर और 1 अक्टूबर को catchup=True के साथ 30 दैनिक runs (1 से 30 सितंबर) बनेंगे।

from datetime import datetime, timedelta, date

logical = datetime(2026, 10, 1)
end = logical + timedelta(days=1)
print("interval", logical.date(), "->", end.date(), "runs at/after", end.isoformat())

start, now = date(2026, 9, 1), date(2026, 10, 1)
runs = [start + timedelta(days=i) for i in range((now - start).days)]
print(len(runs), runs[0], runs[-1])

Output:

interval 2026-10-01 -> 2026-10-02 runs at/after 2026-10-02T00:00:00
30 2026-09-01 2026-09-30

UTC उपयोग करें और स्पष्ट रहें

Airflow आंतरिक रूप से UTC में काम करता है। आपका व्यवसाय भारतीय मानक समय (UTC+5:30) में सोचता हो तो timezone-aware start_date से timezone जानबूझकर तय करें, और याद रखें कि 06:00 IST 00:30 UTC है।

त्वरित जाँच: `catchup=False` क्या करता है?

  • पुराने runs हटाता है
  • DAG बंद करता है
  • चूके हर interval के लिए एक की जगह सिर्फ़ ताज़ा run बनाता है
  • DAG दो बार चलाता है
Answer

चूके हर interval के लिए एक की जगह सिर्फ़ ताज़ा run बनाता है — Catchup के बिना Airflow start_date से हर interval backfill नहीं करता।