繁体   English   中英

从另一个 DAG 生成 DAG

[英]Generating DAG from another DAG

我想从另一个 DAG 动态创建 DAG,例如,当操作员将触发这个父 DAG 时,它应该生成新的 dag。

以下代码运行无误,但未创建 DAG。

我看不出原因。

def generate_dag():

    def do_something():
        print('something')

    default_args = {            
        'schedule_interval': '@hourly',
        'start_date': datetime(2022, 1, 1),
        'is_paused_upon_creation': True
    }

    dag = DAG("generated_dag",
              default_args=default_args,
              catchup=False
              )
    with dag:
        do_something = PythonOperator(
            task_id="do_something",
            python_callable=do_something,
            dag=dag
        )
        do_something

    return dag



default_args = {
    'owner': 'airflow',       
    'max_active_runs': 1,
    'retries': 0
}

dag = DAG(
    'createme',
    default_args=default_args,
    schedule_interval=None,
    start_date=datetime(2019,4,29),
    catchup=False,
    is_paused_upon_creation=False,
)

def create_dag():
    dag = generate_dag()
   
    globals()['generated_dag'] = dag

create = PythonOperator(
    task_id="create",
    python_callable=create_dag,    
    dag=dag
)    
create

我不想在 dags 文件夹中生成 DAG python文件

您不需要createme DAG,只需运行create_dag即可。 天文学家有一篇很棒的文章,里面有例子https://www.astronomer.io/guides/dynamically-generating-dags/

from datetime import datetime
from airflow.operators.python import PythonOperator
from airflow import DAG


def generate_dag():

    def do_something():
        print('something')

    default_args = {            
        'schedule_interval': '@hourly',
        'start_date': datetime(2022, 1, 1),
        'is_paused_upon_creation': True
    }

    dag = DAG("generated_dag",
              default_args=default_args,
              catchup=False
              )
    with dag:
        do_something = PythonOperator(
            task_id="do_something",
            python_callable=do_something,
            dag=dag
        )
        do_something

    return dag

def create_dag():
    dag = generate_dag()
   
    globals()['generated_dag'] = dag

create_dag()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM