订阅更新

数仓宽表和维度模型怎么选?

面试问 145 约 2 分钟读完

本文目录
  1. 面试怎么回答
  2. 维度模型解决的是复用问题
  3. 宽表解决的是消费效率问题
  4. 选型看场景稳定度和复用范围
  5. 我更倾向“底模 + 应用宽表”
  6. 一个典型场景

面试怎么回答

宽表和维度模型不是互斥关系。维度模型通过明确事实粒度和公共维度保证复用、扩展和口径一致;宽表面向稳定场景预先组合字段,减少下游 Join 和使用门槛。我的做法通常是底层保留标准事实与维度模型,上层按固定报表或服务契约生成应用宽表,同时管理字段血缘、负责人、刷新和版本,避免宽表失控复制。

先把这段讲顺;面试官追问时,再展开下面的原理和细节。

详细讲解

宽表查询简单,维度模型边界清晰。有人追求“一张表解决所有分析”,也有人坚持所有指标都现场 Join。

真正的生产方案往往不是二选一。

维度模型负责沉淀稳定事实、维度和一致口径;宽表负责为明确、稳定的消费场景降低查询复杂度。


维度模型解决的是复用问题

事实表先明确业务过程和粒度,维度表统一描述对象。订单、用户、商品、渠道各自有清晰责任,下游可以按不同问题灵活组合。

它的优势是复用、扩展和口径治理,代价是查询需要理解粒度与 Join 关系,对普通分析用户门槛更高。

宽表解决的是消费效率问题

宽表把一个稳定场景需要的事实、维度和派生字段提前组装好,减少下游重复 Join,也能降低复杂查询对线上引擎的压力。

但宽表字段多、重复存储大,维度变化后容易批量回刷。如果不同团队各自建一张“用户订单宽表”,同名字段很快就会出现多套口径。

宽表与维度模型职责边界

选型看场景稳定度和复用范围

探索性强、分析维度经常变化时,更适合基于维度模型灵活查询。日报、推荐特征、固定看板等访问模式稳定时,可以提供应用宽表。

还要考虑数据时效、更新频率、存储成本和回刷范围。高频变化的用户属性直接冗余进大量宽表,维护成本通常很高。

我更倾向“底模 + 应用宽表”

在 DWD、DWS 层保持事实粒度和公共维度一致,在 ADS 或服务层按具体消费契约生成宽表。

宽表要明确负责人、刷新频率、字段来源和版本,能够追溯回底层事实与维度。这样它是可治理的交付层,不是随手复制的结果表。


一个典型场景

一个团队为每张看板都复制一份订单宽表。用户等级规则变更后,需要同时回刷十几张表,而且部分表遗漏,导致同一天的会员 GMV 出现多个结果。

问题并不是“宽表不能用”,而是公共维度和指标口径没有先沉淀。把会员等级历史与订单事实统一后,再按看板需要生成宽表,变更范围才可控。

宽表提升的是消费效率,不能牺牲底层事实的一致性。

刷题进度保存在当前浏览器