Week04|作业|Week04 Lakehouse 最小交付包与 baseline report
把 Week04 收口成一套可交接、可复核、可继续扩展的最小交付包
这份作业不是把实验页再机械重跑一遍,而是要求你把 Week04 真正交付成一套:
可解释、可回看、可演进、可验收 的 Lakehouse 基线包。
这次作业真正要交付什么
Week04 到这里,课程已经把这些判断讲清楚了:
- 为什么需要有记忆的表;
- Iceberg 的状态模型是什么;
- 最小 4 表应该怎样落;
- 本地最小闭环怎样跑;
- baseline 应该怎样看。
这次作业不是再演示一遍命令,而是要把这些内容整理成团队可交接交付物。
建议投入时间
建议按半天作业安排:先整理实验输出,再补齐设计说明、runbook 和评分自查。
最终必交工件
| 工件 | 文件/截图/报告 | 合格标准 | 常见不合格原因 |
|---|---|---|---|
| ADR / Foundation | docs/blueprints/week04/lakehouse_foundation_v1.md |
目标、边界、为什么需要表状态记忆讲清楚 | 写成 Iceberg 百科,没有项目判断 |
| source-to-Iceberg mapping | docs/blueprints/week04/source_to_iceberg_mapping_v1.md |
source、target、transform、required、note 齐全 | 自己发明字段,和 repo schema 不一致 |
| 4 表物化记录 | reports/week04/materialization_report.json |
4 表范围、row count、write mode、snapshot 证据可复核 | 只有 create table,没有真实写入 |
| time travel 记录 | reports/week04/time_travel_demo_report.md |
有 snapshot_id、old/current 对比和结论 | 只说“能 time travel”,没有证据 |
| schema evolution 记录 | reports/week04/schema_evolution_demo_report.md |
只做 add-column,说明兼容性边界 | 扩展到 rename/drop 但无治理说明 |
| baseline report | reports/week04/iceberg_baseline_report.md |
指标、异常、建议完整 | 只有截图或命令,无判断 |
| runbook | runbooks/week04/README.md |
别人能按步骤复现并排错 | 只贴命令,不写前置与失败处理 |
| 课程同步包 | docs/blueprints/week04/course_site_sync_packet_v1.md |
课程页命令与项目 runbook 一致 | 页面、runbook、实际模块三者漂移 |
| 测试证据 | Week04 contract / integration tests 输出 | 能证明 schema、catalog、dry-run、time travel、baseline 都可检查 | 只跑页面,不跑项目验证 |
Week04 在项目里的位置
与真实项目实现对齐
本次作业以 dataPro-lgtm/omnisupport-copilot 的 Week04 主线为准,不再使用占位命令。你提交时要能说明:
| 对齐点 | 项目路径 / 命令 | 作业里要体现什么 |
|---|---|---|
| 主执行路径 | runbooks/week04/README.md |
按 devbox CLI 跑,不把 Dagster 当主写入路径 |
| 环境契约 | python -m pipelines.lakehouse.settings --check |
catalog、warehouse、MinIO endpoint 配置可解释 |
| Catalog smoke | python -m pipelines.lakehouse.catalog --smoke |
bucket、namespace、4 表可 ensure |
| 物化 | python -m pipelines.lakehouse.materialize --all-core --report-json reports/week04/materialization_report.json |
4 表 row count、write mode、snapshot_id 可复核 |
| Inspection | python -m pipelines.lakehouse.inspect_metadata --table silver.ticket_fact --view snapshots |
snapshots / history / files 至少覆盖一张核心 Silver 表 |
| Time travel | python -m pipelines.lakehouse.demo_time_travel --table silver.ticket_fact --out reports/week04/time_travel_demo_report.md |
有旧状态与当前状态对比 |
| Schema evolution | python -m pipelines.lakehouse.demo_schema_evolution --table bronze.raw_doc_asset --add-column source_checksum_algo --out reports/week04/schema_evolution_demo_report.md |
只做 add-column,并说明兼容性边界 |
| Baseline | python -m pipelines.lakehouse.perf_baseline --all-core --out reports/week04/iceberg_baseline_report.md |
形成可交接 baseline report |
这次作业最重要的边界
这次作业不要求:
- dbt / semantic layer 主实现;
- Gold mart 全量设计;
- RAG 主链路;
- 重型基础设施引入;
- compaction / cleanup 的完整生产 pipeline。
它只要求你交付 Week04 自己的最小闭环和正式交付包。
七项任务
任务 1:写清 Lakehouse foundation
lakehouse_foundation_v1.md 至少回答:
- Week04 解决什么问题;
- 为什么 Week03 ingest baseline 还不够;
- 为什么要建立 table state reproducibility;
- 本周做什么、不做什么;
- 后续 Week05 / Week06 / Week08 如何消费这个结果。
任务 2:完成 source-to-Iceberg mapping
source_to_iceberg_mapping_v1.md 至少包含:
| source | source field | target table | target column | type rule | semantic note |
|---|---|---|---|---|---|
| ticket | 待补 | bronze.raw_ticket_event |
待补 | 待补 | 待补 |
不要随意发明字段。真实字段以项目仓库的 source schema、pipelines/lakehouse/iceberg_schemas.py 和 Week02 contract 为准。
任务 3:完成最小 4 表设计
bronze_silver_table_design_v1.md 至少说明:
bronze.raw_ticket_event的角色;bronze.raw_doc_asset的角色;silver.ticket_fact的角色;silver.knowledge_doc的角色;- Bronze 保真与 Silver 统一如何分工;
- hidden partitioning 的初始判断;
- 为什么不提前做 Gold / evidence anchor。
任务 4:完成 catalog runtime plan
catalog_runtime_plan_v1.md 至少说明:
- 为什么选 PyIceberg;
- 为什么用 PostgreSQL-backed SQL Catalog;
- 为什么用 MinIO warehouse;
- catalog / warehouse / table location 如何拆开;
- CLI 与 Dagster thin wrapper 的边界;
- 为什么当前学生主路径是 devbox CLI,而不是 Dagster 直接写 Iceberg。
任务 5:提交 baseline report
iceberg_baseline_report.md 至少包含:
- 表名;
- 当前数据规模;
- snapshot 状态;
- 文件状态;
- 分区状态;
- latest snapshot time;
- time travel demo 结果;
- schema evolution demo 结果;
- 异常点;
- 下一步建议。
任务 6:整理 runbook
runbooks/week04/README.md 至少覆盖:
- 环境准备;
- catalog 检查;
- warehouse 检查;
- ensure table;
- materialization;
- inspection;
- time travel;
- schema evolution;
- baseline report;
- 常见失败与排查。
任务 7:补齐验证证据
至少跑通或解释下面两类验证:
docker compose --profile tools --env-file infra/env/.env.local -f infra/docker-compose.yml run --rm devbox \
pytest tests/contract/test_week4_iceberg_schema_contract.py -vdocker compose --profile tools --env-file infra/env/.env.local -f infra/docker-compose.yml run --rm devbox \
pytest tests/integration/test_week4_catalog_smoke.py \
tests/integration/test_week4_lakehouse_smoke.py \
tests/integration/test_week4_time_travel.py \
tests/integration/test_week4_perf_baseline.py -v如果因为本地资源或 Docker 状态导致无法完整运行,你需要在提交说明里写清楚失败点、错误信息和下一步修复路径。
评分 Rubric
| 维度 | 优秀 | 合格 | 不合格 |
|---|---|---|---|
| 边界意识 | 能解释 Week4 做什么、不做什么,以及为什么不抢跑 | 基本列出 Week4 边界 | 把 dbt / RAG / Gold / governance 当主交付 |
| 可复现性 | 命令、输入、输出、失败排查都能让同学复现 | 有主要命令和报告 | 只有截图或口头成功 |
| 表设计说明 | 4 表角色、业务键、技术键、分区边界都清楚 | 4 表角色基本清楚 | 表边界混乱或字段自造 |
| time travel 证据 | 有 snapshot_id、对比结果和结论 | 有旧状态回看记录 | 没有可复核证据 |
| baseline 质量 | 指标、异常、建议、后续衔接完整 | 记录主要指标 | 只有数字,没有解释 |
| runbook 可执行性 | 另一个同学可按 runbook 接手 | 基本可运行 | 命令散落、缺少前置与排错 |
| 与项目主线一致性 | 明确对齐 Week02/03/04/05 边界和 omnisupport-copilot 真实 runbook |
基本对齐 | 另起一套命名或路径 |
| 验证证据 | contract / integration tests 或等价输出齐全 | 有主要 smoke 输出 | 没有测试或失败原因说明 |
优秀 / 合格 / 不合格边界
| 等级 | 表现 |
|---|---|
| 优秀 | 有设计、有证据、有 baseline、有失败排查,能清楚解释为什么不抢跑 |
| 合格 | 交付物齐全,能覆盖 4 表、snapshot、time travel、schema evolution、baseline |
| 不合格 | 只有截图不解释;只有命令无结果;没有 baseline;跳去做 RAG / dbt 但 Week04 闭环没跑通 |
不接受的作业类型
- 只截图不解释;
- 只贴命令无结果;
- 没有 baseline report;
- 抢跑 RAG / dbt,但 Week4 闭环没跑通;
- 自己发明一套与 repo 不一致的字段和路径;
- 复制旧课程页命令,但没有对齐当前项目 runbook。
提交格式
建议按目录提交 Markdown 报告、命令日志和 baseline report。截图可以作为辅助证据,但不接受“只贴截图不解释”的作业。
提交说明至少包含:
- 本次使用的 repo commit;
- 使用的 data batch / manifest;
- catalog 与 warehouse 配置来源;
- 真实命令来自哪个 runbook;
- 哪些命令按 runbook 跑通,哪些因为环境原因没有跑通;
- 失败点、绕过方式与后续风险。
优秀样例应该具备什么
优秀作业通常有这些特征:
- 能解释为什么选当前 catalog / warehouse;
- 能说明最小 4 表的边界;
- 能给出 snapshot_id 和对比结果;
- baseline report 有结论,而不是只有指标;
- runbook 真的能让另一个同学复现;
- 明确说明哪些内容留给 Week05、Week08 或 Week14。
推荐目录结构
docs/blueprints/week04/
lakehouse_foundation_v1.md
source_to_iceberg_mapping_v1.md
bronze_silver_table_design_v1.md
catalog_runtime_plan_v1.md
runbooks/week04/
README.md
reports/week04/
materialization_report.json
time_travel_demo_report.md
schema_evolution_demo_report.md
iceberg_baseline_report.md
docs/blueprints/week04/
course_site_sync_packet_v1.md
完成标准
这次作业真正的通过标准是:
- 你能交付一套和当前项目结构一致的 Week04 基线包。
- 你能清楚解释为什么只做最小 4 表和 baseline,不抢跑 Week05+。
- 你能说清当前 Dagster / CLI / runtime 的边界,而不是模糊带过。
- 你能提供可以被别人复核的 baseline report。
与 Week05 的衔接
Week05 会基于本周 Silver 表继续 transform 和语义层设计。
它不会回头替你补:
- source-to-Iceberg mapping;
- Bronze / Silver 表状态;
- snapshot / time travel 记录;
- baseline report;
- Week04 runbook。
最后的收尾判断
如果只记住一句话,就记这句:
Week04 交付的不是“会用 Iceberg”,而是一套以后能支撑 release-aware 数据系统的最小状态记忆层。
