1. Databricks平台与数据建模全景
Databricks 是一套围绕 Lakehouse(湖仓一体)理念构建的数据与 AI 平台。理解它的关键,不是记住一堆产品名,而是先看清一条主线:存储层用开放格式承载原始与加工数据,元数据层用 Unity Catalog 统一治理,计算层用工作空间与集群按需执行,工程层用 Delta Lake 保证可靠性与增量处理。数据建模与分析工程,正是在这条主线上展开的。
Lakehouse:把数据湖的开放性与数仓的可靠性合在一起
传统数据湖能存海量原始数据,但缺少事务、约束和高效更新;传统数据仓库可靠、查询快,但格式封闭、扩展成本高。Lakehouse 的做法是:数据仍以 Parquet 等开放格式存放在云对象存储(如 S3、ADLS、GCS)上,但在其上叠加一层事务与元数据管理,使表具备 ACID、时间旅行、Schema 演进等能力。这层能力由 Delta Lake 提供。
因此,Lakehouse 的典型分层可以理解为:云对象存储(物理文件)→ Delta 表(带事务日志的逻辑表)→ Unity Catalog(跨工作空间的统一元数据与权限)→ 计算资源(集群/SQL 仓库)→ 工作空间(Notebook、作业、仪表盘)。建模时,我们关心的“表”其实是 Delta 表,而不是散落的文件目录。
Delta Lake:让表具备事务与可追溯性
Delta 表在数据目录旁维护一个 _delta_log 事务日志,按顺序记录每次提交(commit)。一次写入会生成新的 JSON 提交文件,记录新增/删除的文件、Schema 变化和统计信息。读取时,引擎先读日志确定当前有效文件集合,再读数据文件。这带来几个对建模直接有用的性质:
- ACID 事务:并发写入不会读到中间状态,适合多任务同时加工同一张表。
- 时间旅行:可用
VERSION AS OF或TIMESTAMP AS OF查询历史版本,便于回溯与对账。 - Schema 演进:可安全新增列,配合
mergeSchema处理上游字段变化。 - MERGE 与增量处理:支持 upsert,是维度表和事实表增量更新的基础。
例如,把每日订单增量写入 Delta 表,可用如下方式(示例参数,非实测结果):
MERGE INTO silver.orders AS t
USING staging.orders_daily AS s
ON t.order_id = s.order_id
WHEN MATCHED AND s.updated_at > t.updated_at THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;
执行后可通过 DESCRIBE HISTORY silver.orders 查看提交记录,确认本次操作类型、影响行数与时间戳,从而判断是否按预期完成。
Unity Catalog:统一元数据与权限
Unity Catalog(UC)是跨工作空间的统一治理层,采用三层命名空间:catalog.schema.table。它管理表、视图、函数、模型、卷(Volume)等对象,并统一控制权限。对建模而言,UC 的价值在于:
- 命名规范统一,避免每个工作空间各自为政;
- 权限可授予到 catalog、schema、table 甚至列级;
- 配合血缘(lineage)可追踪表与表之间的加工关系。
一个常见的分层命名示例:prod_lakehouse.bronze.orders_raw、prod_lakehouse.silver.orders_clean、prod_lakehouse.gold.dim_customer。Bronze 存原始接入数据,Silver 做清洗与整合,Gold 面向分析与建模输出。
工作空间与计算资源
工作空间是协作入口,承载 Notebook、作业(Job)、SQL 仓库、仪表盘和 Git 集成。计算资源主要分两类:通用集群用于 Notebook 与作业,可配置 Spark;SQL 仓库用于 BI 与 SQL 分析,按需启停。建模时通常先用交互式集群探索数据,再把稳定逻辑固化为作业调度。
整体工作流
把上述组件串起来,一个典型的数据建模与分析工程流程是:从源系统接入到 Bronze;在 Silver 做清洗、去重、标准化并建立维度与事实;在 Gold 做聚合与宽表;最后通过 SQL 仓库或仪表盘消费。每一步都写入 Delta 表,由 Unity Catalog 统一管理,由集群执行。
这张图把“数据怎么流、表存在哪、谁管权限、谁来算”放在同一张视图里。建模时,先确定 Bronze/Silver/Gold 各层要产出哪些表,再为每张表定义主键、分区、更新策略和权限,最后选择用交互集群还是作业来执行。这样,平台组件就不再是孤立名词,而是围绕建模目标协同工作的整体。
catalog.schema.table 访问 Delta 表,而不是直接读写对象存储路径,这样才能获得事务、权限和血缘能力。