पाठ 10 / 25

Jinja Templating और Macros

Tasks को run की तारीख़ पर निर्भर बनाने के लिए {{ ds }}, data_interval_start और params उपयोग करें।

तारीख़ run की होती है

कई operator fields (जैसे bash_command, SQL files और paths) Jinja से templated होते हैं। Airflow run का वर्णन करने वाले variables देता है: {{ ds }} (logical date, YYYY-MM-DD), {{ data_interval_start }}, {{ data_interval_end }}, {{ run_id }}, {{ params.x }} और अन्य। datetime.now() की जगह इन्हें उपयोग करें ताकि पिछले दिन का re-run उसी दिन का डेटा प्रोसेस करे: यही idempotent, backfill-योग्य pipelines की नींव है। @task functions में वही मान arguments या context से पाएँ।

तारीख़-जागरूक command और path

2026-09-15 के run को दोबारा चलाने पर सिर्फ़ partition dt=2026-09-15 पढ़ा और लिखा जाता है।

export_orders = BashOperator(
    task_id="export_orders",
    bash_command=(
        "python export.py --from '{{ data_interval_start | ds }}' "
        "--to '{{ data_interval_end | ds }}' "
        "--out s3://lake/orders/dt={{ ds }}/"
    ),
)

व्यावसायिक तारीख़ों के लिए now() कभी नहीं

datetime.now() वह समय लौटाता है जब task संयोग से चलता है, जो retries और backfills पर बदलता है और चुपचाप ग़लत डेटा बनाता है। Run की अपनी तारीख़ें उपयोग करें।

त्वरित जाँच: `{{ ds }}` आपको क्या देता है?

  • Run की logical date, YYYY-MM-DD रूप में
  • मौजूदा घड़ी का समय
  • DAG फ़ाइल का नाम
  • एक random संख्या
Answer

Run की logical date, YYYY-MM-DD रूप में — यह run से जुड़ा है, इसलिए re-runs हर बार वही तारीख़ प्रोसेस करते हैं।