第2章 数据建模核心概念与基础面试题:维度表、事实表、缓慢变化维、星型模型等高频问题
本章定位:数据建模面试的“地基题”。面试官通过维度与事实的区分、星型模型理解、缓慢变化维策略选择,快速判断候选人是否具备体系化的建模思维。大厂常将此类问题作为技术面第一轮“筛选题”。
📌 面试问答卡片
1. 请解释维度表与事实表的区别,并举例说明。
| 🎯 考察点 | 是否理解核心建模元素,能否清晰对比,而非死记定义。 |
| 🧠 回答框架 | ① 定义对比(维度:描述特征;事实:度量事件)② 核心区别(粒度、主键、列类型)③ 举例(订单事实表 vs 时间维度表)④ 一句话总结 |
| 💬 简短示例回答 | 维度表存描述性属性,如“用户ID、姓名、城市”;事实表存度量值,如“订单金额、数量”。维度表宽而少行,事实表窄而多行。例如电商订单事实表每天千万行,用户维度表仅百万行。 |
| ❓ 可能追问 | ① 维度表是否可以做反规范化?② 事实表如何定义粒度?③ 退化维度如何处理? |
| ⚠️ 避坑提醒 | 不要混淆“维度退化”与“事实表字段”:退化维度(如订单号)放事实表是合理的,但不要误说成维度表。 |
2. 什么是缓慢变化维?请列举三种常见处理策略并给出适用场景。
| 🎯 考察点 | 能否区分SCD策略,并理解业务选择背后的成本与准确性权衡。 |
| 🧠 回答框架 | ① 定义:维度属性随时间缓慢变化 ② 策略:Type1覆盖、Type2新增行、Type3新增列 ③ 场景举例:用户地址用Type2保留历史;性别用Type1覆盖 ④ 优缺点对比 |
| 💬 简短示例回答 | SCD指维度属性值随时间变化。Type1直接覆盖,适用于不需历史追溯的字段(如产品类别重命名);Type2新增一条记录并标记有效时间,适用于需要历史分析的场景(如用户地址变化);Type3新增“前值”列,适用于只需保留一次变化的场景(如促销活动负责人变更)。 |
| ❓ 可能追问 | ① Type2如何设计有效时间字段?② 如何保证SCD维度的唯一性?③ 是否用过Type6混合策略? |
| ⚠️ 避坑提醒 | 别把“缓慢变化维”和“事实表时间区间”混淆;Type2新增行时必须考虑自然键变更对下游ETL的影响。 |
3. 星型模型与雪花模型有何区别?在大型数仓中你更倾向哪种?
| 🎯 考察点 | 能否从查询性能、存储成本、维护复杂性等维度进行多角度比较,体现工程权衡。 |
| 🧠 回答框架 | ① 结构对比(星型单层维度,雪花多层)② 查询性能(星型join少)③ 存储成本(雪花减少冗余)④ 维护难度 ⑤ 实际选择:大厂AD/BI场景优先星型 |
| 💬 简短示例回答 | 星型模型维度表直接连事实表,查询只需一次join;雪花模型将维度表拆成更细层级,需多次join。以电商为例,星型模型下订单分析延迟低,适合Ad-hoc查询。雪花模型存储节省约15%-20%,但维护复杂。我倾向星型,因为现代数仓对存储不敏感,查询性能更重要。 |
| ❓ 可能追问 | ① 星型模型维度表是否需要做数据一致性校验?② 雪花模型如何优化join性能?③ 是否见过星型和雪花混合模型? |
| ⚠️ 避坑提醒 | 不要化:“星型永远比雪花好”;要补充根据查询模式、数据更新频率做选择。另外避免说雪花模型“无冗余”,它只是冗余转移到了维度子表。 |
📌 项目案例模板:电商订单实时数仓建模
| 项目名称 | 电商订单实时OLAP数据平台(日增量50TB) |
| 业务背景 | 电商大促期间需秒级展示全国订单量、GMV、退货率等指标,支撑运营决策和实时风控。 |
| 规模指标 | 日均订单事实表 2 亿行;维度表 30+ 张,最大用户维度 3 亿行;实时延迟 < 5 秒。 |
| 技术栈 | Kafka -> Flink -> Hudi(或 Iceberg)-> ClickHouse / StarRocks。维度建模工具:dbt + Data Vault辅助。 |
| 核心难点 | ① 实时SCD Type2实现(用户地址频繁变更)② 维度表与事实表Join性能优化 ③ 数据回溯与一致性保证(exactly-once) |
| 面试高频追问 | - 实时建模如何解决维度延迟问题?(预关联、宽表、异步Join) - 为什么选择星型而不是雪花?(查询路径少,更适配ClickHouse宽表) - SCD Type2在实时流中如何标记有效时间?(watermark与事件时间对齐) |
| 可迁移回答话术 | “我在电商实时数仓中采用星型模型为核心,事实表按订单粒度,维度表反范式化去冗余,同时使用Flink维表关联实现低延迟Join。为了解决SCD Type2,我们通过CDC捕获维度变化并写入Hudi,下游用Apache Calcite进行历史版本查询。这个设计支撑了日均数十亿级实时查询,P99延迟控制在3秒内。” |
💡 面试加分技巧:回答建模基础题时,主动关联“业务场景”和“查询频次”。例如讲星型模型时,可以说“我们团队在广告分析场景特意选择了星型,因为分析师每天跑50+维度组合报表,减少join次数直接缩短了查询时间。”
⚠️ 常见踩坑:部分候选人把“垂直分表”与“雪花模型”混为一谈。雪花模型是基于业务层级拆解维度(如地区-省份-城市),不是简单的字段拆分。务必结合维度层级解释。