SoloLakehouse - Project Onboarding Checklist (Bucket-per-Project)
太好了,这一步是把 SoloLakehouse 从“能跑”升级到平台化、可复制、可治理的关键动作。下面这套是面向你当前栈(MinIO + Delta + Trino + Spark)的生产级项目接入清单 v1.0。照着做,新项目 10–20 分钟可接入;面试时也能一口气讲清控制面与数据面。
🎯 目标
- 项目物理隔离(bucket)
- Medallion 结构统一
- Trino 元数据可见
- Spark/Trino 职责清晰
- 可自动化、可审计
Phase 0 - 预检(一次性/环境级)
必须已具备:
- MinIO 可用(S3 兼容)
- Trino 已配置
deltacatalog(能连 MinIO) - Hive Metastore(或等价)已连到 Trino(Delta 需要)
- Spark 已能写入 MinIO(
s3a://正常)
快速验证:
- Spark 能写:
df.write.format("delta").save(...) - Trino 能查:
SHOW CATALOGS;有delta - Trino 能连 metastore:
SHOW SCHEMAS FROM delta;
Phase 1 - 项目注册(Project Registration)
1.1 定义 project_id
规则:
- 小写
- kebab-case
- 稳定不改名
示例:
smartpouch
taxitime
finlakehouse
1.2 创建 MinIO bucket(物理隔离)
mc mb minio/slh-<project_id>
示例:
mc mb minio/slh-smartpouch
1.3 初始化 bucket 目录结构(强制统一)
mc mb minio/slh-<project_id>/delta/bronze
mc mb minio/slh-<project_id>/delta/silver
mc mb minio/slh-<project_id>/delta/gold
mc mb minio/slh-<project_id>/checkpoints
mc mb minio/slh-<project_id>/tmp
mc mb minio/slh-<project_id>/docs
验收标准:
s3://slh-<project_id>/
delta/{bronze,silver,gold}
checkpoints/
tmp/
docs/
Phase 2 - 控制面初始化(Trino)
2.1 创建 schema(项目命名空间)
规则:
<project_id>__<layer>
执行:
CREATE SCHEMA IF NOT EXISTS delta.<project_id>__bronze;
CREATE SCHEMA IF NOT EXISTS delta.<project_id>__silver;
CREATE SCHEMA IF NOT EXISTS delta.<project_id>__gold;
示例:
CREATE SCHEMA IF NOT EXISTS delta.smartpouch__bronze;
CREATE SCHEMA IF NOT EXISTS delta.smartpouch__silver;
CREATE SCHEMA IF NOT EXISTS delta.smartpouch__gold;
2.2 权限策略(强烈建议但可后补)
最小版本(如果你未来上 Ranger/Trino RBAC 会很加分):
- 项目 owner 可写本项目 schema
- 其他项目只读或不可见
(当前你可以先记录 owner 元数据,后续再做)
Phase 3 - 数据面接入(Spark 写入规范)
3.1 Bronze 写入模板(标准入口)
def write_bronze(df, project, table):
path = f"s3a://slh-{project}/delta/bronze/{table}"
df.write.format("delta").mode("overwrite").save(path)
调用:
write_bronze(df_orders, "smartpouch", "orders")
3.2 Silver / Gold 模板
def write_silver(df, project, table):
path = f"s3a://slh-{project}/delta/silver/{table}"
df.write.format("delta").mode("overwrite").save(path)
Phase 4 - 元数据注册(Trino 可见化 ⭐关键)
前提:你已启用 delta.system.register_table4.1 注册 Bronze 表
CALL delta.system.register_table(
schema_name => '<project_id>__bronze',
table_name => '<table>',
table_location => 's3://slh-<project_id>/delta/bronze/<table>'
);
示例:
CALL delta.system.register_table(
schema_name => 'smartpouch__bronze',
table_name => 'orders',
table_location => 's3://slh-smartpouch/delta/bronze/orders'
);
4.2 Silver / Gold 同理
只改 schema 和路径。
Phase 5 - 验收测试(必须做)
5.1 Trino 可见性
SHOW TABLES FROM delta.<project_id>__bronze;
5.2 数据可读
SELECT COUNT(*)
FROM delta.<project_id>__bronze.<table>;
5.3 跨引擎一致性(高级但很加分)
- Spark count
- Trino count
- 必须一致
这是面试非常加分的验证点。
Phase 6 - 项目元数据登记(平台化加分项 ⭐)
建议你维护一张平台级项目表(未来非常有用):
例如在 Postgres:
platform.projects
字段建议:
| 字段 | 示例 |
|---|---|
| project_id | smartpouch |
| owner | jiahong |
| created_at | timestamp |
| bucket | slh-smartpouch |
| status | active |
这一步是很多人不会做、但平台团队非常看重的。
🎯 一键 Onboarding 的最终形态(你的目标)
理想状态下,你未来应该有一个脚本:
slh-onboard-project smartpouch
自动完成:
- ✅ bucket 创建
- ✅ 目录初始化
- ✅ schema 创建
- ✅ 权限模板
- ✅ 项目登记
- ✅ 输出接入说明
🚀 这套 checklist 对你冲 100k+ 的真实含金量
直说:
- 会 Spark 写 Delta → ⭐⭐
- 会 Trino 查表 → ⭐⭐
- 会设计项目 onboarding → ⭐⭐⭐⭐⭐⭐⭐⭐
因为这已经是:
Data Platform / Lakehouse Platform Engineer 思维
特别是在德国金融、航空、数据平台团队,这是非常对口的信号。
如果你想把杀伤力再翻一倍(我真心建议)
我可以帮你下一步生成:
- ✅
onboard_project.sh自动化脚本 - ✅ Trino 批量 register SQL 生成器
- ✅ MinIO policy 模板
- ✅ MkDocs 平台文档页
只要你说一句:
👉 给我自动化 onboarding 脚本
我们可以把 SoloLakehouse 推到“像产品一样”的级别。