企业数仓架构实战案例
概述
理论讲完,落到真实业务才见功力。本文用电商、金融、物联网三个典型行业,演示数仓架构如何设计:业务特点、分层映射、技术选型、批流结合与治理方案。每个案例都给出可复用的架构图式与设计要点。
一、电商数仓架构
1.1 业务特点
| 特点 | 说明 |
|---|---|
| 数据源多 | 交易库、用户库、日志、埋点 |
| 指标繁多 | GMV、UV、转化率、复购、漏斗 |
| 时效要求 | 日报 T+1,实时大屏分钟级 |
| 主题清晰 | 订单/用户/商品/营销 |
1.2 架构图式
MySQL(订单/用户) ─┐
埋点日志(Kafka) ─┼─► ODS(Hive/Hudi)
营销数据(MySQL) ─┘ │
┌────┴────┐
▼ ▼
DWD 明细层 DIM 维度层
(订单明细宽表)(用户/商品拉链)
│ │
▼ ▼
DWS 主题汇总(用户日活/商品日销)
│
▼
ADS 指标层
├── 报表(GMV日报)
├── 大屏(实时 GMV)
└── 接口(供数)1.3 设计要点
| 层 | 关键设计 |
|---|---|
| ODS | 交易表全量 + 增量同步;埋点 Kafka → Hudi 近实时 |
| DWD | 订单明细宽表,退化用户/商品常用属性 |
| DWS | 用户每日汇总、商品每日汇总、渠道汇总 |
| ADS | GMV 日报、留存漏斗、品类榜单 |
| 实时线 | Kafka → Flink → 实时指标 → Doris/大屏 |
1.4 核心指标口径示例
| 指标 | 口径 | 计算位置 |
|---|---|---|
| 支付 GMV | 已支付未退款订单金额 SUM | DWS |
| 下单转化率 | 支付用户/下单用户 | ADS |
| 复购率 | 近 30 天购买 ≥2 次用户占比 | ADS |
电商数仓的教训:埋点数据要先做"用户会话识别"再入明细层,否则 UV 统计失真。
二、金融数仓架构
2.1 业务特点
| 特点 | 说明 |
|---|---|
| 合规严格 | 数据留痕、权限审计、敏感字段脱敏 |
| 准确性要求高 | 金额分毫不差,禁止口径漂移 |
| 数据机密 | 客户信息强加密,行级权限 |
| 批流结合 | 日终批处理 + 实时风控 |
2.2 架构图式
核心系统(MySQL/Oracle) ─┐
风控事件(Kafka) ─┼─► ODS(加密存储)
征信/外部数据 ─┘ │
┌─────────┴────────┐
▼ ▼
DWD 明细层 DIM 客户主数据
(账户/交易流水) (KYC 拉链)
│ │
▼ ▼
DWS 汇总(客户资产/交易量)
│
▼
ADS
├── 监管报送(T+1 强一致)
├── 客户经营分析
└── 实时风控特征(Flink 实时)2.3 安全与合规设计
| 项 | 方案 |
|---|---|
| 客户信息 | 加密区存储 + 列级脱敏(手机号、证件号) |
| 访问权限 | Ranger 行级策略:客户经理只看管辖客户 |
| 审计 | 全量访问审计,敏感表只追加日志 |
| 口径一致性 | 监管指标 DWS 唯一计算,禁下游重算 |
| 数据保留 | 按监管要求保留 N 年,到期归档 |
2.4 特殊要求
- 对账日切:日终跑批前先做当日账务对账,不平则阻断。
- 指标版本:监管指标变更要记录版本,历史口径可追溯。
- 双写保障:实时风控与离线统计共用 DWD 明细,避免两套口径。
金融数仓的核心是可信:任何一次金额不一致都是事故级问题,质量规则必须前置卡点。
三、物联网(IoT)数仓架构
3.1 业务特点
| 特点 | 说明 |
|---|---|
| 数据量大 | 百万设备秒级上报 |
| 时序性强 | 传感器数据按时间聚合 |
| 设备维度 | 设备/站点/区域多级 |
| 混合查询 | 实时告警 + 离线分析 |
3.2 架构图式
设备上报(Kafka) ──► Flink 实时链路
│ ├── 实时告警(规则引擎)
│ └── 实时聚合 → 指标
▼
ODS 原始时序(Hudi/Iceberg,分区:设备+小时)
│
▼
DWD 时序明细(清洗、对齐采样间隔、填充缺失)
│
▼
DWS 聚合(设备小时/日聚合:均值、峰值、异常次数)
│
▼
ADS(设备画像、站点运行分析、故障报表)3.3 设计要点
| 项 | 方案 |
|---|---|
| 分区策略 | 时间 + 设备 ID 哈希,控制单分区大小 |
| 压缩 | 时序数据相似度高,ZSTD 压缩收益大 |
| 聚合下推 | 均值/峰值在 DWS 预聚合,避免明细全扫 |
| 冷热分层 | 热数据 Hudi,冷数据归档对象存储 |
| 实时融合 | Flink 直接产出实时指标,与离线对账 |
3.4 特殊处理
- 缺失值处理:采样间隔内无上报,DWD 层按规则填充(前值/零值)并打标记。
- 设备生命周期:DIM 设备表用拉链记录上线/下线/换装。
- 海量吞吐:Kafka 分区按设备 ID 哈希保证同设备有序,Flink 按设备 Key 聚合。
物联网数仓的教训:不要把所有原始数据都搬进数仓,明细层保留必要周期,长期明细下沉冷存储。
四、三类案例对比
| 维度 | 电商 | 金融 | 物联网 |
|---|---|---|---|
| 核心诉求 | 指标多、口径统一 | 合规、准确性 | 吞吐、时序聚合 |
| 数据规模 | 中 | 中 | 大(时序) |
| 实时要求 | 分钟~小时 | 秒(风控) | 秒 |
| 敏感度 | 中 | 高 | 低 |
| 建模重点 | 订单/用户主题 | 客户主数据 + 监管口径 | 设备 + 时间聚合 |
| 关键风险 | 埋点口径 | 金额一致性、泄露 | 数据量爆炸 |
五、通用落地清单
1. 业务域梳理 → 确定主题与指标
2. 分层设计 → ODS/DWD/DWS/ADS/DIM 映射
3. 建模 → 星型/星座 + 拉链维度
4. 选型 → 存储(Hive/Hudi)+ 计算(Spark/Flink)+ 查询(Doris/ClickHouse)
5. 规范 → 命名/类型/权限/生命周期
6. 质量 → 对账规则 + 监控告警
7. 治理 → 血缘/字典/指标管理
8. 持续 → 月度盘点、僵尸表清理、口径复审小结
三个案例说明同一个道理:架构不是模板堆砌,而是围绕业务核心诉求取舍。电商重口径统一,金融重合规可信,物联网重吞吐与时序;分层框架相同,落地的重点与风险控制完全不同。