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。

posted @ 2026-10-25 09:02  RobinDevNotes  阅读(3)  评论(0)    收藏  举报