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 已配置 delta catalog(能连 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_table

4.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_idsmartpouch
ownerjiahong
created_attimestamp
bucketslh-smartpouch
statusactive

这一步是很多人不会做、但平台团队非常看重的。


🎯 一键 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 推到“像产品一样”的级别。