DevOps

[Airflow] SubDag을 이용하여 MainDag과 스케쥴을 다르게 설정하기!!!!! (feat. ChatGPT)

Dan-k 2023. 3. 13. 09:00
반응형

airflow로 매일 아침 8시에 실행되는 parentDag이 있고, 그 안에 매달 1일 아침 10시에 실행되는 subDag을 구성하려고 해. 이 코드를 파이썬으로 작성해줄수 있겠어?

 

라고 ChatGPT에게 시켜보았습니다.

그랬더니...
이런 코드를.
 
 

네, airflow에서 매일 아침 8시에 실행되는 parent DAG과 매월 1일 아침 10시에 실행되는 sub DAG을 구성하는 파이썬 코드는 다음과 같습니다.

from datetime import datetime
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.subdag_operator import SubDagOperator
from airflow.utils.dates import days_ago
from subdag import subdag

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': days_ago(1),
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1
}

dag = DAG(
    'parentDag',
    default_args=default_args,
    description='Parent DAG',
    schedule_interval='0 8 * * *'
)

start_task = DummyOperator(
    task_id='start_task',
    dag=dag
)

subdag_task = SubDagOperator(
    task_id='subdag_task',
    subdag=subdag('parentDag', 'subdag_task', default_args),
    dag=dag,
)

end_task = DummyOperator(
    task_id='end_task',
    dag=dag
)

start_task >> subdag_task >> end_task

이때, subdag은 별도의 파일(subdag.py)로 작성하여 import하여 사용합니다.

from datetime import datetime
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator

def subdag(parent_dag_name, child_dag_name, default_args):
    dag_subdag = DAG(
        dag_id=f"{parent_dag_name}.{child_dag_name}",
        default_args=default_args,
        start_date=datetime(2022, 1, 1),
        schedule_interval='0 10 1 * *'
    )
    
    subdag_start = DummyOperator(
        task_id='subdag_start',
        dag=dag_subdag
    )
    
    subdag_end = DummyOperator(
        task_id='subdag_end',
        dag=dag_subdag
    )
    
    subdag_start >> subdag_end
    
    return dag_subdag

이렇게 구성된 DAG은 매일 아침 8시에 parentDag을 실행하고, 매월 1일 아침 10시에 subDag을 실행하게 됩니다.

 
 
그랬더니...
무섭다...
이제 프로그래머도..코딩능력이 없어도 되는 날이 오려나..

 

ChatGPT로 앱이나 개발해보아야겠다.

728x90
반응형
LIST