三层湖仓是什么
湖仓常见的组织方式是 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 | 源系统原始数据 | 原样落地,附加采集元数据 | 不可变的原始表 |
| silver | bronze 原始表 | 去重、类型统一、维度关联 | 口径一致的明细表 |
| gold | silver 明细表 | 按主题聚合与指标计算 | 看板与结果的消费表 |
湖仓分层要沿用数仓既有的命名与口径规范,否则两套体系并存,同一个指标在两个地方各算一遍,业务方拿到不一致的数字。
bronze 层一旦开始做覆盖写或直接清洗,原始数据就不可追溯,上游逻辑变更后没有可重放的基线。