flowchart LR
subgraph Scripts["脚本链路"]
A["ticket_ingest.py"] --> B["doc_ingest.py"]
B --> C["lakehouse materialize"]
C --> D["dbt build"]
end
subgraph Assets["资产化数据工厂"]
S["source manifest"] --> G["manifest gate"]
G --> R["raw_ticket_events"]
R --> F["ticket_fact"]
F --> M["support_kpi_mart"]
M --> E["run_evidence_report"]
end
Week06|课时1|为什么脚本跑通不等于数据产品可运营
跑通脚本只是开始,能运营资产才是系统能力
这一讲先立住 Week06 的问题意识:
AI 数据工程的失败,很多时候不是脚本没跑,而是团队不知道哪些数据资产处于什么状态。
这节课解决什么问题
Week03 已经让我们有了 ingest、checkpoint、replay、backfill 的脚本思维。问题是:
如果链路由多个脚本、表、指标和未来索引组成,团队靠什么判断今天的数据产品是否可消费?
靠脚本日志不够,靠口头顺序不够,靠“我刚才跑过了”更不够。
参考学习时间
45–55 分钟
学完这一讲,你应该能做到什么
- 区分“任务流”和“资产流”。
- 解释为什么 Week03 的 replay/backfill 需要升级成 asset-level recovery。
- 说清 AI 数据链路为什么必须有资产状态、分区状态和运行证据。
- 识别脚本堆叠带来的交接、回填和下游阻断风险。
- 说明 Week06 为什么不是 Dagster UI 教程。
本课产出
docs/blueprints/week06/week06-data-factory-blueprint.mddocs/blueprints/week06/week06-asset-graph.md
先看一张总图
这张图的差别不在“换了工具”,而在:
- 左边关心脚本是否跑过
- 右边关心资产是否可消费
- 左边依赖人工记忆
- 右边记录依赖、分区、检查和证据
1. 脚本跑通为什么仍然不可运营
先看一个课堂里很常见的 bad case:
Warning事故小剧场
A 同学在本机跑完 ticket_ingest.py,日志里出现 success。B 同学第二天接手时只知道“昨天跑过”,但不知道 ticket_fact 哪个分区完成、Week05 KPI mart 是否同步、run evidence 是否生成。下游如果继续做 Week08 index,很可能把一个缺证据的状态当成正式 baseline。
脚本式 pipeline 最容易留下四类盲区:
| 盲区 | 表现 | 后果 |
|---|---|---|
| 顺序盲区 | 只知道先跑哪个脚本 | 换人后无法复现 |
| 状态盲区 | 不知道哪个分区成功 | 补数靠猜 |
| 质量盲区 | 跑完没有 checks | 坏数据进入下游 |
| 证据盲区 | 没有 run evidence | 评测、追踪、治理断链 |
团队真正会问的不是“脚本是不是跑过”,而是:
- 今天哪些 asset 可以被下游消费?
- 哪个 partition 是最新可信状态?
- 上游 manifest 是哪一版?
- 输入和输出行数是否对得上?
- 有没有重复写入或漏数?
- 如果失败,应该 retry、replay 还是 backfill?
- Week04 / Week05 依赖没启用时,是 blocked、skipped 还是 not_available?
- 证据 JSON 在哪里,schema 是否校验过?
- 谁能批准下游 unblock?
- 另一个人能不能照 runbook 复现恢复路径?
2. 任务流和资产流的区别
任务流关注:
- 运行了哪个脚本
- 脚本 exit code 是什么
- log 里有没有报错
资产流关注:
- 哪个 asset 被 materialize
- 上游依赖是否满足
- 哪个 partition 成功或失败
- 哪些 checks 通过
- 证据 report 在哪里
- 下游是否应该放行
Important核心判断
任务流回答“我跑了什么”;资产流回答“系统现在能相信什么”。
任务日志 / Pipeline Run / Asset State / Run Evidence
| 对象 | 它能说明什么 | 它不能替代什么 |
|---|---|---|
| 脚本日志 | 某段代码运行时发生了什么 | 不能证明下游可消费 |
| pipeline run | 某次编排是否结束 | 不能表达具体 asset 的业务状态 |
| asset state | 某个资产和分区的 materialization / check 状态 | 不能替代结构化证据归档 |
| run evidence | 运行事实、reason code、report path、downstream decision | 不能替代代码测试和人工 runbook |
3. 为什么 AI 数据工程更需要资产流
AI 数据系统的下游不只是看板,还会包括:
- Week07 文档解析与 chunk
- Week08 检索和证据服务
- Week10 工具调用
- Week11 评测
- Week14 治理和发布追踪
这些系统不会关心你昨晚跑了哪个脚本,它们关心:
- 输入来自哪个 manifest
- 哪个 partition 已完成
- 数据是否重复或漏数
- run evidence 是否完整
- release / trace / git sha 是否能追溯
4. Week06 的最小升级路径
Week06 不是重写 Week03–Week05,而是做薄包装:
existing ingest scripts
-> Dagster assets
-> daily partitions
-> asset checks
-> run evidence
-> data factory runbook
常见误解
| 误解 | 纠偏 |
|---|---|
| Dagster 的价值是 UI 好看 | UI 只是表象,核心是 asset state model |
| 脚本能重跑就等于可恢复 | 没有分区边界和幂等证据,重跑仍然危险 |
| 有日志就有证据 | 日志是过程材料,run evidence 才是可校验交付物 |
| 有 Dagster UI 就有数据工厂 | 没有 asset key、checks、evidence、runbook,UI 只是展示层 |
| 资产图越复杂越专业 | Student Core 先要少量关键资产和清晰命名 |
| runbook 是最后补文档 | runbook 是系统设计的一部分 |
自检清单
课后最小行动
在项目笔记中写下:
## Week06 operational asset risks
- 哪些脚本目前只靠人工顺序运行
- 哪些数据资产缺少分区状态
- 哪些结果缺少 checks
- 哪些 report 可以作为 run evidence 起点