Dagster:数据资产编排平台,血缘与质量检查内置

一张表过期了,你要多久才发现?
摘要
Dagster 是以数据资产为中心的开源编排平台,把"跑哪些任务"改成"产出哪些数据资产",血缘、新鲜度和质量检查随之内置。GitHub 约 1.6 万 star,Apache 2.0 协议,官方另有托管的企业版 Dagster+。
它想解决什么
按任务编排的流水线,图上的每个节点都是"一件要做的事":A 跑完跑 B,B 跑完跑 C。可数据团队真正关心的是结果:哪张表过期了,哪份报表受影响,下游谁在用。这些信息不在任务图里,往往要靠人脑,或者另配一套血缘、质量工具去补。
Dagster 的思路是从结果出发:先声明要产出哪些数据,再让编排、血缘和质量检查围绕这些数据展开。官网把自己定位成"AI 原生的 DataOps 平台",核心是以数据资产为中心的管道。
核心新概念:数据资产(asset)
Dagster 把编排的单位定为"数据资产":表、数据集、机器学习模型、报表。你用 Python 函数声明"我要产出这个数据资产",Dagster 负责在合适的时间跑它,并让它保持最新。
官方 README 里的例子只有三个函数:
import dagster as dg
import pandas as pd
from sklearn.linear_model import LinearRegression
@dg.asset
def country_populations() -> pd.DataFrame:
df = pd.read_html("https://tinyurl.com/mry64ebh")[0]
df.columns = ["country", "pop2022", "pop2023", "change", "continent", "region"]
df["change"] = df["change"].str.rstrip("%").astype("float")
return df
@dg.asset
def continent_change_model(country_populations: pd.DataFrame) -> LinearRegression:
data = country_populations.dropna(subset=["change"])
return LinearRegression().fit(pd.get_dummies(data[["continent"]]), data["change"])
@dg.asset
def continent_stats(
country_populations: pd.DataFrame, continent_change_model: LinearRegression
) -> pd.DataFrame:
result = country_populations.groupby("continent").sum()
result["pop_change_factor"] = continent_change_model.coef_
return result
注意两点:
- 依赖写在参数里。
continent_stats的参数名就是它依赖的数据资产名,不需要再单独写一遍"谁先谁后"。 - 血缘是顺手得到的。 依赖关系既然写在代码里,Dagster 就能直接画出数据资产图,不用事后去解析 SQL 或日志。
官网上的几个"新东西"
读完官网,有这几条值得单独记:
1. 数据资产上挂着上下文。 每个数据资产都带着血缘、新鲜度、质量信号和依赖关系,运行与失败记录也按数据资产归档。看一张表,就能看到它从哪来、新不新、最近是否出过错。
2. 声明式自动化(Declarative Automation)。 不再手写"每天 3 点跑",而是描述数据资产应有的状态,由 Dagster 去推动它达到这个状态。
3. 数据质量内置。 数据资产检查、新鲜度策略、dbt 测试集成,都是同一套数据资产模型里的东西,不是外挂。
4. 分支部署(Branch Deployments)。 改了管道,先在接近生产的环境里验证,不碰真实数据。
5. 混合部署。 计算跑在你自己的基础设施上,Dagster 只管控制平面。云、本地、混合都支持。
6. 面向 AI 的一层。 官网现在把自己定位成"AI 原生的 DataOps 平台",Dagster+ AI 会利用数据资产、运行、血缘、新鲜度和失败历史去帮忙诊断问题。这部分更像产品方向,页面上细节不多,我只当作路线参考。
企业版 Dagster+ 与价格
核心框架开源;Dagster+ 是官方托管的商业版本,没有永久免费档,提供 30 天试用。定价页上的公开价格:
| 档位 | 月价 | 说明 |
|---|---|---|
| Solo | 10 美元 | 1 个用户、1 个代码位置 |
| Starter | 100 美元 | 最多 3 个用户、5 个代码位置 |
| Pro | 联系销售 | 不限代码位置,含更完整的企业能力 |
计费单位是"积分":每次数据资产物化、每个执行的 op 算 1 个积分(Solo 每积分 0.04 美元,Starter 0.035 美元)。混合部署不收计算费,官方托管的无服务器计算另按分钟计费。数据资产级血缘、分支部署、声明式自动化各档都有;列级血缘、目录搜索、SSO 等企业功能按档位逐级开放,具体归属以官网定价页为准。
一个必须知道的变化
2026 年 7 月 13 日,Prefect 宣布收购 Dagster Labs,买下产品、代码库和客户关系,部分 Dagster 成员加入 Prefect。Dagster 官方的客户常见问题里写明:没有把 Dagster 并入 Prefect 的计划,不要求客户迁移,对开源项目的承诺不变,近期重点是让现有客户稳定。有媒体报道称 Dagster 保留名称和路线图,但官方没给出具体的产品方向,说会提前通知。
这属于公司层面的变化,对已有用户影响多大,还要看后续动作。选型时值得留意。
面向人群
- 管着一堆定时任务,却说不清"哪张表依赖哪张"的数据工程师。
- 已有一堆调度脚本,又另外补了血缘或数据质量工具,嫌拼起来太散的团队。
- 想把 dbt、Snowflake 等工具串在同一张图里的数据平台团队。
不太适合:只有三五个脚本、没有下游依赖的小项目,上这套模型是过度设计。
快速上手
uv init dagster-demo && cd dagster-demo
uv add dagster dagster-webserver dagster-dg-cli pandas scikit-learn lxml
uv run dagster dev -f assets.py
前两行是官方 README 的装法,后面三个包是示例代码自己要用的(read_html 依赖 lxml)。把上面的三个数据资产存成 assets.py,启动后打开终端里提示的本地地址,就能看到数据资产图,点"物化"即可运行。官方支持 Python 3.9 到 3.14。新项目官方更推荐用 dg 命令行搭脚手架,单文件试玩用 dagster dev 就够了。
官网列出的客户案例有数字,但都是厂商自述,没有第三方验证:比如 Vanta 称数据新鲜度提升 14 倍,easyJet holidays 称管道效率提升 15 倍。可以当参考,别当基准。
结尾:选型前的检查清单
- 你的痛点是"说不清哪张表依赖哪张、坏了影响谁",而不只是"定时跑脚本"。
- 能接受用 Python 函数声明数据资产,依赖写在函数参数里。
- 血缘、新鲜度、质量检查想放在同一套模型里,而不是再拼一个工具。
- 本地先跑通:
uv run dagster dev -f assets.py,看一眼数据资产图。 - 开源版(Apache 2.0)够用就先自托管;要托管再看 Dagster+,Solo 每月 10 美元起,30 天试用。
- 留意收购进展:Prefect 已宣布收购,官方承诺不并入、不要求迁移,具体路线待公布。
项目地址:github.com/dagster-io/dagster,官网 dagster.io。
浙公网安备 33010602011771号