Apache Hamilton (incubating) 1.90.0 介绍与选型指南
基于 Apache Hamilton (incubating) 1.90.0(PyPI 2026-04-25 发布)官方 README 与文档溯源:函数即 DAG 的数据变换框架、装饰器与 Driver 体系、快速上手与限制,并对照 Airflow TaskFlow/Dagster/dbt Core 给出选型建议(查询日期 2026-10-18)。
Apache Hamilton (incubating) 1.90.0 介绍与选型指南
目标:一篇读懂 Apache Hamilton——「函数即 DAG」的轻量级 Python 数据变换框架的定位、概念体系、功能与上手路径,并从函数化视角对照 Airflow TaskFlow、Dagster、dbt Core 给出选型建议;本文为认知篇,内容基于官方 README/PyPI/官方文档联网溯源,不做本地安装实测(查询日期 2026-10-18)。
一、信息基准
本节说明本文所有关键论断的取证口径:查询日期、版本依据与官方来源清单。
- 查询日期:2026-10-18(Asia/Shanghai)。
- 版本依据:PyPI 官方仓库 pypi.org/project/apache-hamilton/ 当前最新发布为 1.90.0(上传时间 2026-04-25,PyPI 实查);项目处于 ASF 孵化期,官方仓库与 PyPI 页面均带 Apache Hamilton (incubating) 免责声明(Apache Incubator PMC 赞助),故版本口径如实写为「(incubating) 1.90.0」。
- 官方来源清单:
- 项目主页:https://hamilton.apache.org/
- 官方仓库:https://github.com/apache/hamilton
- PyPI 发布:https://pypi.org/project/apache-hamilton/
- 入门文档:https://hamilton.apache.org/get-started/
- 概念文档(UI 可视化/编目/监控):https://hamilton.apache.org/concepts/ui
- 社区活跃度依据:GitHub apache/hamilton 约 5.5k stars(shields.io 实查 2026-10-18);最近发版 1.90.0(2026-04-25)。
二、软件概述
本节给出 Hamilton 的身份定位、许可与孵化状态,先回答「它解决什么问题」。
Apache Hamilton (incubating) 1.90.0 是一个轻量级 Python 库,用于构建数据变换的有向无环图(DAG)。官方 README 的定位原话:你的 DAG 是可移植的——它运行在任何 Python 运行的地方(脚本、笔记本、Airflow 流水线、FastAPI 服务等);你的 DAG 是可表达的——Hamilton 提供丰富特性来定义与修改 DAG 的执行(如数据校验、实验跟踪、远程执行)。创建 DAG 的方式是编写普通 Python 函数、以函数参数名声明依赖,Hamilton 加载定义后自动构建并执行 DAG。
- 当前版本:1.90.0(2026-04-25 发布于 PyPI,实查)。
- 许可:Apache License 2.0(ASF 孵化项目标准许可)。
- 孵化状态:官方仓库顶部免责声明——incubation 状态不代表代码完整性/稳定性评价,仅表示尚未获得 ASF 完全背书(原文口径,2026-10-18 引述)。
- 姊妹项目:需要循环或条件逻辑(LLM Agent、仿真场景)时,官方 README 指向姊妹库 Burr(https://github.com/apache/burr )——Hamilton 只做 DAG,不做循环。
- 配套:Apache Hamilton UI 提供自动可视化、数据编目与执行监控(官方概念文档口径)。
💡 说明:Hamilton 与「工作流编排器」的边界——它不负责定时调度、重试策略、跨机器资源分配;它负责函数依赖图的声明、解析、执行与观测。它既可以独立运行,也可以作为 Airflow/Dagster 任务内部的数据处理引擎,二者是嵌套关系而非互斥关系。
三、核心架构
本节拆解 Hamilton 的「函数即节点」概念模型与执行体系。
3.1 函数即 DAG 的声明模型
官方 README 给出的模型:每个 Python 函数是一个节点;函数名是节点输出名;函数参数名即对其他节点的引用,参数依赖自动构成边。最小形态如下(官方 README「Functions B() and C() refer to function A via their parameters」语义):
def A(a: int) -> int:
return a
def B(A: int) -> int: # 参数名 A 引用函数 A 的输出
return A + 1
def C(B: int, A: int) -> int: # 参数名 B、A 引用上游
return B + A
关键性质:代码即 DAG 定义,因此永远可以可视化(官方原话);同一份函数定义可在脚本、notebook、Web 服务中复用,无需改写。
3.2 Driver 与执行体系
执行入口是 driver:以 Builder 组装模块后构建 Driver,再请求指定输出节点(官方 get-started 口径,见五)。围绕执行,Hamilton 提供三类扩展点(官方 README/文档归纳):
| 扩展点 | 作用 |
|---|---|
| 装饰器体系 | 节点级变换与增强:参数化派生(parameterize)、输出列拆分(extract_columns)、数据校验(check_output)等 |
| 执行适配 | 异步执行、多引擎扩展(Dask/Ray/Spark 等分布式运行时插件)、远程执行 |
| 产物适配 | 结果物化与实验跟踪/数据校验平台集成(Materializing 适配器体系) |
3.3 观测与 UI
官方概念文档描述的 Hamilton UI 能力:自动可视化 DAG、执行编目(catalog)、运行监控;开源库与 UI 通过追踪数据打通,便于团队治理随时间演化的数据流。
💡 技术拓展:函数依赖声明的两种流派——
流派 机制 代表 参数名即依赖 函数签名天然携带依赖关系,无装饰器也能成图 Hamilton 装饰器声明依赖 需显式注解上游/输入契约 Airflow TaskFlow(xcom 参数)、Dagster asset 参数 Hamilton 的取舍是用「约定」换取零噪声声明;代价是依赖关系藏在参数命名约定中,需靠工具(可视化/UI)辅助审阅。
四、功能特性
本节按官方 README/文档归纳 1.90.0 的能力面。
- 自动 DAG 构建与执行:普通函数声明即成图,请求输出即执行所需子图(懒执行)。
- 可移植执行:同一 DAG 可运行于脚本、notebook、Airflow 流水线、FastAPI 服务(官方 README 原话)。
- 数据校验:@check_output 等校验装饰器,在节点级断言数据契约。
- 实验跟踪/编目:Materializing 适配器对接跟踪与编目,配合 Hamilton UI 观测执行。
- 可视化:DAG 始终可渲染(官方「can always be visualized」口径)。
- 分布式扩展:官方扩展生态支持 Dask/Ray/Spark 等引擎执行同一函数图。
- LLM 友好:数据流图式组织适合 RAG/LLM 应用管道;含循环/分支的 Agent 场景官方指向姊妹库 Burr。
💡 说明:1.90.0 相对早期开源版(sf-hamilton 时代)完成了 ASF 化的包名与治理迁移,PyPI 包名为 apache-hamilton;历史资料中出现 sf-hamilton 安装命令的需注意包名差异。
五、快速上手
本节引自官方 README 与官方 get-started 文档的最小示例(安装 → 声明函数图 → Driver 执行),仅转录官方模式,本文不做本地实测。
5.1 安装(引自官方 PyPI 页与 README)
# PyPI 官方发布包(包名 apache-hamilton)
pip install apache-hamilton
来源:https://pypi.org/project/apache-hamilton/ (2026-10-18 引述)。
5.2 声明函数图并执行(引自官方 get-started 模式)
官方入门文档的最小模式:模块内以参数名声明依赖,Driver 加载模块后请求输出节点(模式与官方 https://hamilton.apache.org/get-started/ 及仓库 README 一致,2026-10-18 引述):
# my_functions.py —— 每个函数即一个节点
def A(a: int) -> int:
return a
def B(A: int) -> int: # 参数名 A → 依赖节点 A
return A + 1
def C(B: int, A: int) -> int: # 参数名 B、A → 依赖节点 B、A
return B + A
from hamilton import driver
import my_functions
dr = driver.Builder().with_modules(my_functions).build()
result = dr.execute(["C"], inputs={"a": 2}) # 请求 C 即自动执行 A、B
| 步骤 | 官方语义 |
|---|---|
with_modules(...) | 注册函数模块,Hamilton 扫描其中全部函数构建 DAG |
execute(["C"], inputs=...) | 请求输出节点 C,引擎沿依赖边执行其上游所需子图 |
外部输入 a | 无上游函数的参数成为图的输入节点,经 inputs 注入 |
💡 说明:请求输出改为
["B"]时 Hamilton 只执行 A→B 子图——这既是惰性求值,也是「同一函数库服务多种下游」的复用机制;官方 get-started 章节还提供可视化与校验的后续步骤(见参考链接)。
六、适用场景与限制
本节给出该版本的适用边界判断,以官方文档口径为依据。
适用场景:
- ETL/特征管道、ML 工作流、RAG/LLM 应用中「纯函数变换、依赖清晰」的数据流组织。
- 需要「一套函数定义多端复用」(批处理、API 服务、notebook)的数据团队。
- 已有 Airflow/Dagster 等编排器,但编排器内代码缺乏结构化与可观测,希望以 DAG 库规范任务内部逻辑。
限制与注意:
- 仅支持 DAG:官方明确循环/条件逻辑(Agent、仿真)应改用姊妹库 Burr。
- 孵化期项目:API 演进仍快(1.x 段小版本号跳跃),升级需关注变更;治理背书弱于 ASF 顶级项目。
- Python 生态绑定:团队需统一 Python 3.8+(官方 README 口径)与非 Python 数据栈的对接自行桥接。
- 调度/重试/队列等编排能力需外挂,把它当 Airflow 替代品是误用。
七、同类选型对比
本节从「函数化数据流」视角对比三款相关工具,数据均于 2026-10-18 实查(来源:PyPI JSON API、GitHub Releases atom、shields.io stars)。
| 维度 | Apache Hamilton (incubating) 1.90.0 | Apache Airflow 3.3.2 | Dagster 1.13.26 | dbt Core 1.12.6 |
|---|---|---|---|---|
| 定位 | Python 函数级 DAG 库(执行库) | 工作流编排平台 | 数据资产编排平台 | SQL 优先的分析工程工具 |
| 许可 | Apache-2.0(孵化中) | Apache-2.0 | Apache-2.0 | Apache-2.0 |
| 社区活跃度 | 约 5.5k stars;1.90.0(2026-04-25) | 约 47k stars;3.3.2(2026-09-17),providers 周更(2026-10-17) | 约 16k stars;1.13.26(2026-10-09) | 约 14k stars;1.12.6(2026-10-14) |
| 版本节奏 | 1.x 段持续小版本,数月一版 | 大版本年 1-2 次 + 补丁 + providers 周更 | 月级小版本高频迭代 | 月级小版本,季度大版本 |
| 兼容矩阵 | Python 3.8+(官方口径);插件对接 Dask/Ray/Spark | Python 3.9+(3.x 系口径);Executor 多形态 | Python 3.9+ 口径;CLI+守护进程+UI | Python 3.9+ 口径;面向数据仓库 SQL |
| 抽象层级 | 函数/节点(库级,嵌入任意进程) | 任务/DAG(平台级,带调度器) | 资产/作业(平台级,带调度与血缘) | 模型/资产(SQL 编译执行) |
选型建议:一句话——要「给 Python 数据变换代码建立可复用、可观测、可嵌入的依赖图」选 Hamilton;要「定时调度、跨团队平台化运维」选 Airflow;要「以数据资产为中心的测试血缘」选 Dagster;分析变换以 SQL 为主选 dbt Core;四者可组合——Hamilton 常作为 Airflow/Dagster 任务内的执行内核。
八、参考链接
- 项目主页:https://hamilton.apache.org/
- 官方仓库/README:https://github.com/apache/hamilton
- PyPI 发布页:https://pypi.org/project/apache-hamilton/
- 入门文档:https://hamilton.apache.org/get-started/
- Hamilton UI 概念:https://hamilton.apache.org/concepts/ui
- 姊妹库 Burr:https://github.com/apache/burr
- 对比工具发布源:https://github.com/apache/airflow/releases 、 https://pypi.org/project/apache-airflow/ 、 https://pypi.org/project/dagster/ 、 https://pypi.org/project/dbt-core/