SoloLakehouse Post-Medallion Experiment Roadmap
Hiring Manager Signal: Medallion Architecture 是入门票,下面的实验才是 100k+ 的区分点。 招聘经理看到的不是"你搭了一个平台",而是"你能用平台解决业务问题、量化影响、防止数据质量事故"。 每个实验完成后,请用一句话描述业务影响,而非技术实现。
思维框架:从工程师到平台架构师
| 工程师思维 | 平台架构师思维 |
|---|---|
| "我把数据从 Bronze 写到了 Silver" | "我设计了数据促进合约,任何下游消费者都可以信任 Silver 层的质量 SLA" |
| "我搭了 MLflow" | "我建立了模型生命周期治理,模型上线前必须通过质量门禁" |
| "Trino 查询跑起来了" | "我实现了多引擎联邦查询,计算与存储解耦,引擎可以独立扩展" |
每个实验结束后,写一段 ADR(Architecture Decision Record)。这是区分高级工程师的核心信号。
Phase 1:数据质量与可观测性(第 1-2 周)
目标:让 Medallion 每一层有"数据合约",而不是靠人工检查质量
Experiment 1.1 — Data Quality Gate(数据质量门禁)
问题:当前 Bronze → Silver 的提升是否有质量保证?还是盲目写入?
实验内容:
- 在 Bronze → Silver 的 PySpark job 中,加入 Great Expectations 或 Soda Core 校验
- 定义至少 5 条规则:non-null、type check、value range、uniqueness、referential integrity
- 质量检查失败时,数据停留在 Bronze,写入 quarantine 分区,不晋升 Silver
- 在 Grafana 中增加 Dashboard:每次 pipeline run 的质量通过率
验收标准:
- [ ] 故意注入脏数据,验证 quarantine 分区生效
- [ ] Grafana 能看到 data quality score 随时间变化
- [ ] 写一份 ADR:为什么选择 Great Expectations vs Soda Core
招聘经理视角:这是 regulated industry(金融、医疗、政府)的硬性要求,展示你懂数据治理而非只懂管道。
Experiment 1.2 — Pipeline Observability(管道可观测性)
问题:当前 pipeline 失败时,你如何知道?在哪一步失败?数据量是否异常?
实验内容:
- 在每个 PySpark ETL job 中,提取并写入 pipeline metrics 到 Postgres:
run_id,layer(bronze/silver/gold),rows_in,rows_out,rows_rejected,duration_sec,status
- 在 Grafana 创建 Pipeline Observability Dashboard:
- 每层行数趋势(数据量异常检测)
- 处理时长趋势
- 成功/失败比率
- 用 Airflow 的 callback(
on_failure_callback)实现告警(写入 log 或发邮件)
验收标准:
- [ ] 运行 5 次 pipeline,在 Grafana 能看到时间序列数据
- [ ] 模拟一次 Silver job 失败,告警被捕获
招聘经理视角:没有可观测性的数据平台是"黑箱工程",这个实验证明你以运维视角设计系统。
Phase 2:引擎集成与性能(第 3-4 周)
目标:证明你的平台是多引擎架构,不是单点工具堆叠
Experiment 2.1 — 多引擎联邦查询基准测试
问题:Trino vs DuckDB vs PySpark 在不同查询模式下的性能差异?什么场景用什么引擎?
实验内容:
- 在 Gold 层准备一个真实数据集(建议用你的 Frankfurt Airport taxi prediction 数据,或公开的 NYC Taxi 数据)
- 设计 3 类查询:
- 大扫描(full table scan, aggregation)
- 复杂 JOIN(多表关联)
- 点查询(按 ID 或时间范围过滤)
- 分别用 Trino、DuckDB(通过 Python)、PySpark 执行相同查询,记录:
- 查询时间、CPU/内存占用、引擎启动开销
- 输出一份 Engine Selection Matrix(哪种工作负载选哪个引擎)
验收标准:
- [ ] Jupyter Notebook 包含完整的基准测试代码和结果
- [ ] 写成 README 中的 "When to Use Which Engine" 决策指南
招聘经理视角:平台架构师的标志是知道为什么选择这个工具,而不是"只会用一个锤子"。
Experiment 2.2 — Iceberg Time Travel & Schema Evolution
问题:当 Gold 层 schema 发生变化(比如新增列),下游 Trino 查询是否无感知?历史数据可以回溯吗?
实验内容:
- 向 Silver 或 Gold Iceberg 表中写入 v1 数据(schema A)
- 用
ALTER TABLE ADD COLUMN进行 schema 演化,写入 v2 数据(schema B) - 用 Trino 执行 Time Travel 查询:
SELECT * FROM table FOR SYSTEM_TIME AS OF TIMESTAMP '...' - 验证:
- v1 时刻的数据没有新列(或填充 NULL)
- v2 时刻的数据包含新列
- Spark 与 Trino 对同一份 Iceberg 表的读取结果一致
验收标准:
- [ ] 时间旅行查询返回正确的历史状态
- [ ] 写一份 ADR:Iceberg Time Travel 对数据审计的意义
招聘经理视角:这是 Databricks 的核心卖点之一,你能在自建平台上实现同等能力,直接对标 Databricks 认证内容。
Phase 3:ML 平台集成(第 5-6 周)
目标:把 Medallion Architecture 和 ML 生命周期连接起来,实现端到端闭环
Experiment 3.1 — Feature Engineering Pipeline(Gold → Feature Store)
问题:Gold 层的聚合数据如何变成可复用的 ML 特征?
实验内容:
- 选择一个预测任务(建议用 Frankfurt Airport 的时间预测数据)
- 在 Gold 层基础上,用 PySpark 计算特征(滑动窗口统计、时间编码、lag features)
- 将特征写入 Feast Feature Store(如未安装,先用简单的 Iceberg Feature Table 模拟)
- 用 MLflow 追踪:使用了哪个版本的特征集训练了哪个模型
验收标准:
- [ ] 训练数据可以通过特征版本号追溯到具体的 Gold 层数据快照
- [ ] MLflow Experiment 记录:feature_set_version、数据集大小、模型指标
招聘经理视角:特征与模型的版本绑定是 MLOps 成熟度的核心指标,金融/医疗行业的必要要求。
Experiment 3.2 — Model Quality Gate(模型上线门禁)
问题:新训练的模型应该满足什么条件才能被"提升"到 Production?
实验内容:
- 在 MLflow 中定义模型晋升规则(用 MLflow Model Registry):
- Staging → Production 需要:accuracy > baseline_threshold AND no data drift detected
- 用 Python 脚本实现自动化检查:
- 对比新模型 vs 当前 Production 模型的指标
- 如果新模型更好,自动标记为
Staging,生成审批记录
- 在 Airflow 中添加一个
model_promotion_dag,每次模型训练完成后自动触发
验收标准:
- [ ] 故意训练一个差模型,验证门禁阻止它晋升 Production
- [ ] MLflow UI 中能看到清晰的 Staging/Production 状态历史
招聘经理视角:这直接对应 Databricks ML Professional 认证的核心概念,也是 FinLakehouse 的 AI Governance 基础。
Phase 4:治理与合规(第 7-8 周)
目标:向 FinLakehouse 演化,证明你能构建 regulated AI 平台
Experiment 4.1 — Data Lineage 追踪
问题:Gold 层的一条数据,是从哪个 Bronze 文件的哪个行演化来的?
实验内容:
- 将 lineage 写入 Postgres 的
data_lineage表 - 实现一个简单的 lineage 查询 API(用 FastAPI):输入一个表名,返回其上游依赖链
在每个 ETL job 中,写入 lineage metadata:
{ "target_table": "gold.aggregated_metrics", "source_tables": ["silver.cleaned_events", "silver.reference_data"], "transformation_job": "silver_to_gold_v2.py", "run_id": "airflow_run_20260220", "row_count": 15234}
验收标准:
- [ ] 能查询到
gold.aggregated_metrics的完整上游依赖 - [ ] API 返回 JSON,可以作为 FinLakehouse 的 governance API 基础
招聘经理视角:Data Lineage 是 GDPR / DORA 合规的核心能力,也是 Unity Catalog 的核心卖点。你自建了等价能力。
Experiment 4.2 — Audit Log(操作审计日志)
问题:谁在什么时间查询了哪张表?这是金融监管的硬性要求。
实验内容:
- 在 Trino 前面配置 Trino Event Listener,捕获所有查询事件
- 将查询日志(user、query_sql、tables_accessed、execution_time、status)写入 Postgres
- 在 Grafana 创建 Audit Dashboard:
- Top 10 most queried tables
- Query volume by time of day
- Failed query rate
验收标准:
- [ ] 执行 10 次不同查询,在 Audit Dashboard 中全部可见
- [ ] 写一份文档:这如何满足 MiFID II 的数据访问审计要求
招聘经理视角:这是 FinLakehouse 的直接组件,也是你向 regulated AI 平台方向最有力的作品集证明。
里程碑总结与作品集打包
完成上述实验后,你的 SoloLakehouse 将具备:
| 能力 | Databricks 对标 | 你的实现 |
|---|---|---|
| 数据质量 | Delta Live Tables Expectations | Great Expectations + Quarantine Layer |
| 管道可观测性 | Databricks Workflows 内置 | Prometheus + Grafana + Postgres Metrics |
| 多引擎查询 | Databricks SQL + Photon | Trino + DuckDB + Spark |
| Schema 演化 | Delta Lake Schema Evolution | Iceberg Schema Evolution + Time Travel |
| 特征工程 | Databricks Feature Store | Feast / Iceberg Feature Tables + MLflow |
| 模型治理 | MLflow Managed Registry | 自建 Model Quality Gate + Airflow DAG |
| 数据血缘 | Unity Catalog Lineage | 自建 Lineage API (FastAPI + Postgres) |
| 审计日志 | Unity Catalog Audit | Trino Event Listener + Audit Dashboard |
这8项能力,就是你在面试中说"我建了一个 Databricks 等价平台"的底气。
每个实验完成后的标准产出
- 代码:提交到 GitHub,有清晰的 commit message
- ADR:
docs/adr/XXX-decision-name.md(一页纸,说明背景、决策、权衡) - README 更新:在项目 README 的 Roadmap 中打勾
- 一句话业务描述:能够解释这个实验解决了什么业务问题(不是技术问题)
对 100k+ offer 的影响:High。能自建数据治理、ML 治理、审计能力的工程师, 在金融/医疗/政府领域稀缺。这些实验直接对应 Senior Data Engineer / ML Platform Engineer 的 JD。