首页/数据/数仓建模速查/湖仓分层:bronze/silver/gold 实践
湖仓与引擎63 条

湖仓分层:bronze/silver/gold 实践

湖仓常用三层组织:bronze 原始入湖、silver 清洗整合、gold 面向业务汇总;与数仓 ODS/DWD/DWS-ADS 分层一一对应,便于迁移与对齐。

数仓建模速查数据更新于 2026-10-13

三层湖仓是什么

湖仓常见的组织方式是 bronze / silver / gold 三层:bronze 存放从源系统原样落地的原始数据,只追加不覆盖,保留重放能力;silver 对原始数据做去重、类型统一与维表关联,形成口径一致的明细;gold 在明细之上按主题计算指标,直接服务看板、报表与特征。这套分层与离线数仓的 ODS / DWD / DWS-ADS 一一对应,区别只是存储换成对象存储加开放表格式,分层的判据和职责没有变。

基本信息

适用平台对象存储或 HDFS 加 Iceberg、Delta、Hudi 等开放表格式
三层命名bronze / silver / gold,也有 raw-cleaned-curated、landing-staging-marts 的叫法
对应数仓分层bronze 对应 ODS,silver 对应 DWD,gold 对应 DWS 与 ADS
bronze 原则原样落地、追加写、不做破坏性清洗
silver 职责去重与主键对齐、类型与编码统一、维度关联
gold 职责指标汇总、按主题组织、直接对接消费方
层间校验行数、去重前后计数、金额合计三类差异比对

典型使用场景

  • 采集落地:Flink CDC、Kafka 消费或批量文件直接写 bronze,保留原始字段与采集时间,便于事后重放
  • 清洗整合:silver 处理乱序与迟到数据,按主键去重,把多源同一实体对齐到一份明细
  • 指标产出:gold 计算主题指标供看板与报表使用,分析师只在 gold 层取数
  • 逻辑变更重算:上游口径调整时从 bronze 重跑 silver 与 gold,原始数据不受影响
  • 权限分层:bronze 只对数据工程开放,silver 对建模人员开放,gold 面向分析师与业务

分层目录与表名规划

分层目录与表名规划
# 目录按层组织,层内再分表与分区
s3://lake/bronze/trade_order/dt=2026-10-12/      # 原始落地,只追加
s3://lake/silver/dwd_trade_order_di/dt=2026-10-12/ # 清洗后的明细
s3://lake/gold/dws_trade_store_day/dt=2026-10-12/  # 面向业务的汇总

# 表名沿用与数仓相同的规范,湖与仓两套体系口径一致
-- silver:按主键去重,保留最新一条
SELECT * FROM (
  SELECT *, row_number() OVER (PARTITION BY order_id ORDER BY update_time DESC) AS rn
  FROM lake.bronze.trade_order WHERE dt = '2026-10-12'
) WHERE rn = 1;

三层职责逐项对照

层输入处理动作产物
bronze源系统原始数据原样落地,附加采集元数据不可变的原始表
silverbronze 原始表去重、类型统一、维度关联口径一致的明细表
goldsilver 明细表按主题聚合与指标计算看板与结果的消费表
湖仓分层要沿用数仓既有的命名与口径规范,否则两套体系并存,同一个指标在两个地方各算一遍,业务方拿到不一致的数字。
bronze 层一旦开始做覆盖写或直接清洗,原始数据就不可追溯,上游逻辑变更后没有可重放的基线。

易错点

  • bronze 层做清洗或覆盖写:原始数据丢失,口径变更时无法回放重算
  • 三层命名各起一套:湖与仓取同一个指标结果不一致,核对成本远高于建模收益
  • 层间没有质量校验:脏数据一路流到 gold,等看板数字异常才反查上游
  • gold 直接读 bronze 跨层取数:绕过 silver 的口径统一,不同看板的指标不可比
  • 每层都全量复制一份数据:存储成本翻倍,血缘关系也变得难以追踪

数据来源与参考

  • Databricks 官方文档:Medallion Architecture
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌