Airflow 在气流中创建DAG的可能性

Airflow 在气流中创建DAG的可能性,airflow,airflow-scheduler,airflow-operator,Airflow,Airflow Scheduler,Airflow Operator,是否有一种方法可以从代码中动态生成DAG文件并将其上载到airflow(airflow从DAG目录中读取,但为每个DAG创建文件并将其上载到该文件夹很慢) 是否可以创建模板dag并在需要时使用新逻辑填充它 我看到他们正在开发API。当前版本只有一个触发器DAG选项。您可以很容易地在一个文件中创建多个DAG: 创建dag(dag\U id): dag=dag(..) //增加了一些任务 返回dag 对于dag_列表中的dag_id: globals()[dag\U id]=创建dag(dag\U

是否有一种方法可以从代码中动态生成DAG文件并将其上载到airflow(airflow从DAG目录中读取,但为每个DAG创建文件并将其上载到该文件夹很慢)

是否可以创建模板dag并在需要时使用新逻辑填充它


我看到他们正在开发API。当前版本只有一个触发器DAG选项。

您可以很容易地在一个文件中创建多个DAG:

创建dag(dag\U id):
dag=dag(..)
//增加了一些任务
返回dag
对于dag_列表中的dag_id:
globals()[dag\U id]=创建dag(dag\U id)

如果您使用模板功能创建一个合适的DAG对象(
create_DAG
,在上面的示例中),并使它们在globals对象中可用,则气流会将它们识别为单个DAG。

您可以很容易地在一个文件中创建多个DAG:

创建dag(dag\U id):
dag=dag(..)
//增加了一些任务
返回dag
对于dag_列表中的dag_id:
globals()[dag\U id]=创建dag(dag\U id)

如果使用模板功能创建一个合适的DAG对象(
create_DAG
,在上面的示例中),并使它们在全局对象中可用,则气流会将它们识别为单个DAG。

是的,您可以创建动态DAG,如下所示:

从日期时间导入日期时间
从气流导入DAG
从afflow.operators.python_operator导入PythonOperator
def create_dag(dag_id,
日程
达古号,
默认参数):
def hello_world_py(*args):
打印('Hello World')
打印('这是DAG:{}'。格式(str(DAG_编号)))
dag=dag(dag_id,
计划时间间隔=计划,
默认参数=默认参数)
对于dag:
t1=蟒蛇算子(
任务\u id='hello\u world',
python\u callable=hello\u world\u py,
dag_编号=dag_编号)
返回dag
#为范围(10)中的每个数字构建dag
对于范围(1,10)内的n:
dag_id='hello_world_{}'。格式(str(n))
默认参数={'owner':'afflow',
“开始日期”:日期时间(2018年1月1日)
}
时间表=“@daily”
dag_编号=n
globals()[dag\U id]=创建dag(dag\U id,
日程
达古号,
默认值(参数)
来自

但是,请注意,这可能会导致一些问题,如任务执行之间的延迟。这是因为在为单个DAG调度/执行每个任务时,Airflow Scheduler和Worker必须解析整个文件

由于在同一个文件中有许多DAG(比如100个),这意味着在为DAG1执行单个任务时,必须解析所有100个DAG对象


我建议构建一个工具,为每个DAG创建一个文件。

是的,您可以按如下方式创建动态DAG:

从日期时间导入日期时间
从气流导入DAG
从afflow.operators.python_operator导入PythonOperator
def create_dag(dag_id,
日程
达古号,
默认参数):
def hello_world_py(*args):
打印('Hello World')
打印('这是DAG:{}'。格式(str(DAG_编号)))
dag=dag(dag_id,
计划时间间隔=计划,
默认参数=默认参数)
对于dag:
t1=蟒蛇算子(
任务\u id='hello\u world',
python\u callable=hello\u world\u py,
dag_编号=dag_编号)
返回dag
#为范围(10)中的每个数字构建dag
对于范围(1,10)内的n:
dag_id='hello_world_{}'。格式(str(n))
默认参数={'owner':'afflow',
“开始日期”:日期时间(2018年1月1日)
}
时间表=“@daily”
dag_编号=n
globals()[dag\U id]=创建dag(dag\U id,
日程
达古号,
默认值(参数)
来自

但是,请注意,这可能会导致一些问题,如任务执行之间的延迟。这是因为在为单个DAG调度/执行每个任务时,Airflow Scheduler和Worker必须解析整个文件

由于在同一个文件中有许多DAG(比如100个),这意味着在为DAG1执行单个任务时,必须解析所有100个DAG对象


我建议构建一个工具,为每个DAG创建一个文件。

我将尝试一下。谢谢我要试一试。谢谢