用途:dag-factory 让用户用 YAML 声明式地描述 Apache Airflow DAG,适合低代码、配置化的 DAG 编写场景;若需要可复用且带 Pydantic 校验的 Pythonic 模板,建议改用 blueprint,若需要完全 Python 灵活性,建议使用纯 Python 编写 DAG。
版本与依赖:目标为 dag-factory v1.0+,要求 Python 3.10+、Airflow 2.4+(支持 Airflow 3)。1.0 之前的项目需先按迁移指南升级。安装方式为在 requirements.txt 中加入 dag-factory>=1.0.0;它不会自动安装 Airflow provider,需自行安装 YAML 引用到的 provider 包。
主要能力:每个顶层 YAML 键(除 default 外)定义一个 DAG,键即 dag_id;v1.0.0 起推荐 tasks 与 task_groups 使用列表格式。支持 default 块、default_args、schedule(cron、预设、Dataset 列表或 type timetable)、catchup、description、tags、dependencies、task_group_name 等字段。任务通过 operator 指定完整导入路径,其他键作为 kwargs 传入。支持动态任务映射(expand 与 partial;task_id.output 用于 XCom 式引用,+task_id 用于裸值引用)、Dataset 生产者/消费者与条件调度(and/or)、三种回调写法(字符串可调用路径、文件路径加函数名、provider 回调)、以及用 type 构造 datetime、timedelta、timetable、k8s 对象等自定义 Python 对象。
使用方式:在 dags/ 下创建加载文件,调用 load_yaml_dags,并必须传入 globals_dict=globals(),以把生成的 DAG 注册到 Airflow 可发现的模块命名空间;支持按文件夹 glob、单文件或 Python 字典加载。默认值有四层优先级:单个 DAG 内 default_args/DAG 级键、同文件顶层 default 块、load_yaml_dags 的 defaults_config_dict 参数、defaults.yml 文件(defaults_config_path 或自动探测),合并时越接近 DAG 的文件越优先。
校验与限制:可用 dagfactory --version、dagfactory lint <path>(仅校验 YAML 语法)、dagfactory convert <path>(Airflow 2 到 3 导入路径迁移,加 --override 原地应用)。operator 导入错误和缺失 kwargs 需在 Airflow 解析时才会暴露。保留键包括 type、args、join、and、or,以及 type: builtins.list 块内的 items。动态映射不支持任务组映射、zipping 与对展开数据的变换。其他未提供的事实暂缺。