# मूल अवधारणाएँ: DAG, Task, Run, Instance — Apache Airflow: Data Pipelines का Orchestration

Source: https://www.geekswithgeeks.com/hi/airflow/af-core-concepts

> DAG परिभाषा, DAG run, task और task instance में फ़र्क़ करें।

## परिभाषा बनाम निष्पादन

**DAG** परिभाषा है: tasks और उनकी निर्भरताएँ तथा एक schedule। **Task** काम की एक इकाई है, जो **operator** (जैसे `BashOperator` जैसा template) या `@task` decorator से बनती है। DAG के हर बार schedule होने पर Airflow एक **DAG run** बनाता है; उसका हर task अपनी स्थिति (`queued`, `running`, `success`, `failed`, `skipped`, `up_for_retry`…) वाला **task instance** बनता है। DAG run अपनी **logical date** (नए शब्दों में data interval) से पहचाना जाता है, जो बताती है कि run समय के किस टुकड़े के बारे में है, ज़रूरी नहीं कि कब चलता है।

## पहला DAG

`dags/` folder में सहेजें। यह Airflow 3 imports (`airflow.sdk`) उपयोग करता है; Airflow 2 में समतुल्य imports `from airflow import DAG` और `from airflow.operators.bash import BashOperator` हैं। `{{ ds }}` logical date है, YYYY-MM-DD रूप में। मैंने इसे Airflow 3.0.6 पर `airflow dags test hello_airflow 2026-10-01` से चलाया और `say_hello` ने नीचे की पंक्ति छापी।

```python
from datetime import datetime

from airflow.sdk import DAG
from airflow.providers.standard.operators.bash import BashOperator

with DAG(
    dag_id="hello_airflow",
    start_date=datetime(2026, 9, 1),
    schedule="@daily",
    catchup=False,
    tags=["demo"],
) as dag:
    say_hello = BashOperator(task_id="say_hello", bash_command="echo Hello from {{ ds }}")
    say_bye = BashOperator(task_id="say_bye", bash_command="echo Bye")

    say_hello >> say_bye
```

Output:

```
Hello from 2026-10-01
```

**Quiz:** Task instance क्या है?

- [ ] स्वयं DAG फ़ाइल
- [x] किसी ख़ास DAG run में एक task, अपनी स्थिति के साथ
- [ ] Metadata database
- [ ] एक worker मशीन

*Answer:* किसी ख़ास DAG run में एक task, अपनी स्थिति के साथ. Task instance किसी ख़ास run के लिए task का runtime रिकॉर्ड है।
