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 HamiltonApache Hamilton工作流2026/10/18

Apache Hamilton (incubating) 1.90.0 介绍与选型指南

目标:一篇读懂 Apache Hamilton——「函数即 DAG」的轻量级 Python 数据变换框架的定位、概念体系、功能与上手路径,并从函数化视角对照 Airflow TaskFlow、Dagster、dbt Core 给出选型建议;本文为认知篇,内容基于官方 README/PyPI/官方文档联网溯源,不做本地安装实测(查询日期 2026-10-18)。

一、信息基准

本节说明本文所有关键论断的取证口径:查询日期、版本依据与官方来源清单。

二、软件概述

本节给出 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.0Apache Airflow 3.3.2Dagster 1.13.26dbt Core 1.12.6
定位Python 函数级 DAG 库(执行库)工作流编排平台数据资产编排平台SQL 优先的分析工程工具
许可Apache-2.0(孵化中)Apache-2.0Apache-2.0Apache-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/SparkPython 3.9+(3.x 系口径);Executor 多形态Python 3.9+ 口径;CLI+守护进程+UIPython 3.9+ 口径;面向数据仓库 SQL
抽象层级函数/节点(库级,嵌入任意进程)任务/DAG(平台级,带调度器)资产/作业(平台级,带调度与血缘)模型/资产(SQL 编译执行)

选型建议:一句话——要「给 Python 数据变换代码建立可复用、可观测、可嵌入的依赖图」选 Hamilton;要「定时调度、跨团队平台化运维」选 Airflow;要「以数据资产为中心的测试血缘」选 Dagster;分析变换以 SQL 为主选 dbt Core;四者可组合——Hamilton 常作为 Airflow/Dagster 任务内的执行内核。

八、参考链接