📚 数仓高频面试题 Top 20(含参考答案)
适用岗位:数据开发工程师、数仓工程师、BI 工程师、数据分析 难度等级:初中级 → 高级 建议收藏 + 背诵关键点 + 结合项目理解
🔟 基础篇(10 题)
1. 请简述数据仓库的分层架构及每层的作用?

参考答案: 常见的分层为:ODS → DWD → DWS → ADS → DIM
| 层级 | 全称 | 作用 |
|---|---|---|
| ODS | Operational Data Store | 贴源层,原始数据接入,保持与业务系统一致 |
| DWD | Data Warehouse Detail | 明细数据层,清洗、去噪、维度退化、统一口径 |
| DWS | Data Warehouse Summary | 轻度汇总层,按主题(用户、订单等)聚合 |
| ADS | Application Data Service | 应用层,面向报表、BI、接口,直接支撑指标 |
| DIM | Dimension | 维度层,存储公共维度表(用户、商品、时间等) |
✅ 加分点:强调“DWD 是原子指标来源,DWS 支持多指标复用”。
2. 为什么要分层?不分层会有什么问题?
参考答案:
-
好处:
-
解耦:各层职责清晰,便于维护;
-
复用:中间层可被多个应用共享;
-
可追溯:数据链路清晰,便于排查问题;
-
口径统一:在 DWD 层统一逻辑,避免重复计算。
-
-
不分层的问题:
-
数据烟囱:每个报表单独处理原始数据,重复开发;
-
口径不一致:同一指标多个版本;
-
维护困难:逻辑散落在各处,无法快速迭代。
-
3. 什么是维度建模?星型模型和雪花模型的区别?
参考答案:
-
维度建模:由 Kimball 提出,以业务过程为核心,围绕“事实表 + 维度表”构建模型。
-
星型模型:
-
事实表居中,维度表直接关联;
-
维度表冗余较多,但查询性能高;
-
推荐使用。
-
-
雪花模型:
-
维度表进一步规范化,形成层级;
-
存储节省,但 JOIN 多,性能较差;
-
一般不推荐,除非维度特别复杂。
-
✅ 举例:订单事实表 + 用户维度表 + 商品维度表 = 星型模型。
4. 事实表有哪些类型?它们的区别是什么?
| 类型 | 特点 | 示例 |
|---|---|---|
| 事务事实表 | 记录每次业务操作,粒度最细 | 每笔订单、每笔支付 |
| 周期快照表 | 按固定周期记录状态 | 每日库存余额 |
| 累积快照表 | 记录一个流程的全生命周期 | 订单从创建到完成的全过程 |
✅ 关键点:事务型最常用,累积快照用于流程分析。
5. 如何处理缓慢变化维(SCD)?常见策略有哪些?
SCD 类型:
| 类型 | 策略 | 适用场景 |
|---|---|---|
| SCD1 | 覆盖旧值 | 地址错误修正 |
| SCD2 | 增加新行,标记生效时间 | 用户等级变化,需保留历史 |
| SCD3 | 增加新字段 | 只保留最新和上一次值 |
✅ 推荐:SCD2 最常用,通过
start_time,end_time,is_current管理版本。
6. 数仓中的拉链表是什么?如何设计?

参考答案:
-
拉链表:用于记录维度的历史变化,本质是 SCD2 的实现方式。
-
关键字段:
user_id, user_name, province, start_date, end_date, is_active
-
特点:
-
end_date = '9999-12-31'表示当前有效; -
每次维度变化时,关闭旧记录,新增一条新记录。
-
✅ 用途:支持“任意时间点快照”分析,如“去年此时用户分布”。
7. 什么是数据血缘?为什么重要?
参考答案:
-
数据血缘:描述数据从源头到最终报表的流转路径(谁生成、被谁使用)。
-
重要性:

-
故障排查:某字段出错,可快速定位上游;
-
影响分析:修改一个表,知道会影响哪些下游;
-
数据治理:提升数据透明度和可信度。
-
✅ 工具:DataHub、Atlas、自研元数据系统。
8. 数仓建模的流程是怎样的?
参考答案:
-
业务调研:了解业务流程和核心指标;
-
指标拆解:明确原子指标、维度、口径;
-
选择业务过程:如订单、支付、退款;
-
定义粒度:如“每笔订单”;
-
确定维度:时间、用户、商品、地区等;
-
确定事实:金额、数量等度量;
-
构建模型:事实表 + 维度表;
-
评审与迭代。
✅ 强调“以业务过程为中心”。
9. 什么是数据孤岛?如何解决?
参考答案:
-
数据孤岛:数据分散在不同系统,缺乏整合,无法联动分析。
-
解决方案:
-
建设统一数仓/数据湖;
-
制定统一 ID-Mapping(如 user_id 映射);
-
建立公共维度层(DIM);
-
推动指标字典和元数据管理。
-
10. 什么是数据质量?如何保障?
参考答案:
-
数据质量维度:完整性、准确性、一致性、及时性、唯一性。
-
保障手段:
-
ETL 加校验(非空、主键、枚举值);
-
数据探查(Data Profiling);
-
监控告警(如空值率突增);
-
落地 SLA(如 T+1 表准时产出)。
-
🔟 进阶篇(10 题)
11. 如何通过指标拆解指导数仓建模?
【详细见数仓哲与思专栏】

✅ 参考回答见前文:
以 GMV 为例,拆解为“原子指标 + 维度 + 条件 + 时间”,反推需要 DWD 层清洗订单状态,DWS 层按维度聚合,最终支撑多指标复用。
12. 实时数仓的架构是怎样的?与离线数仓的区别?
参考答案:

-
实时架构:
MySQL → Canal/maxwell → Kafka → Flink → Kafka/Doris/ClickHouse → BI -
离线架构:
业务库 → Sqoop/datax → HDFS → Hive/Spark → 报表 -
区别
| 维度 | 离线数仓 | 实时数仓 |
|---|---|---|
| 延迟 | T+1 | 秒级/分钟级 |
| 技术栈 | Hive、Spark | Flink、Kafka、Doris |
| 存储 | HDFS、Hive | Kafka、ClickHouse、Doris |
| 场景 | 日报、周报 | 实时大屏、风控、监控 |
✅ 趋势:Lambda 架构 → Kappa 架构 → 流批一体(Flink Unified)。
13. 什么是维度退化(Degenerate Dimension)?
参考答案:

-
指将没有描述属性的维度(如订单号、发票号)直接作为事实表的字段,而不是单独建维度表。
-
原因:这些“维度”只是业务编号,无属性,建维度表反而增加 JOIN。
-
示例:
order_sn直接放在订单事实表中。
14. 如何设计一个高复用的 DWS 层?
参考答案:
-
按 主题域 设计:用户、订单、商品、流量;
-
按 公共维度 聚合:
user_id,dt,province; -
粒度清晰:如“用户日汇总”;
-
字段通用:只放原子指标(sum_amt, cnt_order),不放派生指标;
-
支持下钻:保留必要维度,便于 ADS 层灵活使用。
15. 什么是数据一致性?如何保证?
参考答案:
-
数据一致性:同一指标在不同报表中结果一致。
-
保证方法:

-
统一在 DWD 层定义原子指标;
-
建立指标字典;
-
避免在 ADS 层重复计算逻辑;
-
定期对账(如离线 vs 实时 GMV)。
-
16. 指标体系如何设计?
参考答案:

-
金字塔结构:
-
顶层:核心 KPI(如 GMV、利润);
-
中层:过程指标(如转化率、留存率);
-
底层:原子指标(订单数、用户数)。
-
-
方法:
-
拆解 KPI(如 GMV = 流量 × 转化率 × 客单价);
-
建立指标树;
-
落地指标字典。
-
17. 如何处理数据延迟或任务失败?
参考答案:
-
监控告警:任务超时、数据量异常;
-
重试机制:自动重试 2-3 次;
-
补数流程:支持按天补数据;
-
依赖管理:避免环形依赖;
-
SLA 管理:关键表 T+1 准时产出率 > 99%。
18. 什么是数据治理?包含哪些内容?

参考答案:
-
数据治理:保障数据可用、可信、可管。
-
核心内容:
-
元数据管理(表、字段、血缘);
-
数据质量;
-
数据安全(脱敏、权限);
-
指标管理;
-
成本治理(冷热数据分层存储)。
-
19. 离线和实时数据如何对账?
参考答案:
-
目标:确保实时数据与离线数据误差 < 1%。
-
方法:
-
在 T+1 将实时累计值与离线值对比;
-
分维度下钻(如按渠道、区域);
-
分析差异原因:延迟、去重逻辑、时间戳处理等;
-
优化实时逻辑(如 Flink 窗口去重)。
-
20. 你在项目中遇到的最大挑战是什么?如何解决的?
✅ 建议模板(结合数仓项目):
“在某电商项目中,多个团队的 GMV 口径不一致,差了 15%。我们通过指标拆解发现:有的包含退款订单,有的未过滤测试数据。 解决方案:
建立指标字典,明确 GMV = 支付订单金额 - 退款订单;
在 DWD 层统一清洗逻辑;
输出统一 DWS 表供所有下游使用。 最终实现全公司 GMV 口径统一,提升了数据可信度。”
📎 附:高频关键词速记表
| 类别 | 关键词 |
|---|---|
| 建模 | 维度建模、星型模型、事实表、维度表、粒度 |
| 分层 | ODS、DWD、DWS、ADS、DIM |
| 指标 | 原子指标、派生指标、指标字典、一致性 |
| 实时 | Flink、Kafka、Doris、实时大屏、流批一体 |
| 治理 | 数据血缘、数据质量、元数据、SCD、拉链表 |
🎯 最后建议: 不要死记硬背,结合自己的项目经历,把这些问题“讲成故事”,面试时才能从容不迫、脱颖而出。
祝你面试顺利,拿下面试!💼✨
往期精彩
京东数据研发一面:用HiveSQL计算新用户近7日留存率(不允许使用JOIN)
SQL面试提问:如何精准计算用户页面停留时长(含连续访问合并与异常处理)





&spm=1001.2101.3001.5002&articleId=149806482&d=1&t=3&u=10b6c90923a84386a7e3b8202d2054ad)
2030

被折叠的 条评论
为什么被折叠?



