数仓高频面试题 Top 20(含参考答案)

📚 数仓高频面试题 Top 20(含参考答案)

适用岗位:数据开发工程师、数仓工程师、BI 工程师、数据分析 难度等级:初中级 → 高级 建议收藏 + 背诵关键点 + 结合项目理解


🔟 基础篇(10 题)

1. 请简述数据仓库的分层架构及每层的作用?

参考答案: 常见的分层为:ODS → DWD → DWS → ADS → DIM

层级全称作用
ODSOperational Data Store贴源层,原始数据接入,保持与业务系统一致
DWDData Warehouse Detail明细数据层,清洗、去噪、维度退化、统一口径
DWSData Warehouse Summary轻度汇总层,按主题(用户、订单等)聚合
ADSApplication Data Service应用层,面向报表、BI、接口,直接支撑指标
DIMDimension维度层,存储公共维度表(用户、商品、时间等)

✅ 加分点:强调“DWD 是原子指标来源,DWS 支持多指标复用”。


2. 为什么要分层?不分层会有什么问题?

参考答案:

  • 好处

    • 解耦:各层职责清晰,便于维护;

    • 复用:中间层可被多个应用共享;

    • 可追溯:数据链路清晰,便于排查问题;

    • 口径统一:在 DWD 层统一逻辑,避免重复计算。

  • 不分层的问题

    • 数据烟囱:每个报表单独处理原始数据,重复开发;

    • 口径不一致:同一指标多个版本;

    • 维护困难:逻辑散落在各处,无法快速迭代。


3. 什么是维度建模?星型模型和雪花模型的区别?

参考答案:

  • 维度建模:由 Kimball 提出,以业务过程为核心,围绕“事实表 + 维度表”构建模型。

  • 星型模型

    • 事实表居中,维度表直接关联;

    • 维度表冗余较多,但查询性能高;

    • 推荐使用。

  • 雪花模型

    • 维度表进一步规范化,形成层级;

    • 存储节省,但 JOIN 多,性能较差;

    • 一般不推荐,除非维度特别复杂。

✅ 举例:订单事实表 + 用户维度表 + 商品维度表 = 星型模型。


4. 事实表有哪些类型?它们的区别是什么?
类型特点示例
事务事实表记录每次业务操作,粒度最细每笔订单、每笔支付
周期快照表按固定周期记录状态每日库存余额
累积快照表记录一个流程的全生命周期订单从创建到完成的全过程

✅ 关键点:事务型最常用,累积快照用于流程分析。


5. 如何处理缓慢变化维(SCD)?常见策略有哪些?

SCD 类型:

类型策略适用场景
SCD1覆盖旧值地址错误修正
SCD2增加新行,标记生效时间用户等级变化,需保留历史
SCD3增加新字段只保留最新和上一次值

✅ 推荐:SCD2 最常用,通过 start_timeend_timeis_current 管理版本。


6. 数仓中的拉链表是什么?如何设计?

参考答案:

  • 拉链表:用于记录维度的历史变化,本质是 SCD2 的实现方式。

  • 关键字段

    user_id, user_name, province, start_date, end_date, is_active
  • 特点

    • end_date = '9999-12-31' 表示当前有效;

    • 每次维度变化时,关闭旧记录,新增一条新记录。

✅ 用途:支持“任意时间点快照”分析,如“去年此时用户分布”。


7. 什么是数据血缘?为什么重要?

参考答案:

  • 数据血缘:描述数据从源头到最终报表的流转路径(谁生成、被谁使用)。

  • 重要性

    • 故障排查:某字段出错,可快速定位上游;

    • 影响分析:修改一个表,知道会影响哪些下游;

    • 数据治理:提升数据透明度和可信度。

✅ 工具:DataHub、Atlas、自研元数据系统。


8. 数仓建模的流程是怎样的?

参考答案:

  1. 业务调研:了解业务流程和核心指标;

  2. 指标拆解:明确原子指标、维度、口径;

  3. 选择业务过程:如订单、支付、退款;

  4. 定义粒度:如“每笔订单”;

  5. 确定维度:时间、用户、商品、地区等;

  6. 确定事实:金额、数量等度量;

  7. 构建模型:事实表 + 维度表;

  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、SparkFlink、Kafka、Doris
存储HDFS、HiveKafka、ClickHouse、Doris
场景日报、周报实时大屏、风控、监控

✅ 趋势:Lambda 架构 → Kappa 架构 → 流批一体(Flink Unified)。


13. 什么是维度退化(Degenerate Dimension)?

参考答案:

  • 指将没有描述属性的维度(如订单号、发票号)直接作为事实表的字段,而不是单独建维度表。

  • 原因:这些“维度”只是业务编号,无属性,建维度表反而增加 JOIN。

  • 示例order_sn 直接放在订单事实表中。


14. 如何设计一个高复用的 DWS 层?

参考答案:

  • 按 主题域 设计:用户、订单、商品、流量;

  • 按 公共维度 聚合:user_iddtprovince

  • 粒度清晰:如“用户日汇总”;

  • 字段通用:只放原子指标(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%。我们通过指标拆解发现:有的包含退款订单,有的未过滤测试数据。 解决方案:

  1. 建立指标字典,明确 GMV = 支付订单金额 - 退款订单;

  2. 在 DWD 层统一清洗逻辑

  3. 输出统一 DWS 表供所有下游使用。 最终实现全公司 GMV 口径统一,提升了数据可信度。”


📎 附:高频关键词速记表

类别关键词
建模维度建模、星型模型、事实表、维度表、粒度
分层ODS、DWD、DWS、ADS、DIM
指标原子指标、派生指标、指标字典、一致性
实时Flink、Kafka、Doris、实时大屏、流批一体
治理数据血缘、数据质量、元数据、SCD、拉链表

🎯 最后建议: 不要死记硬背,结合自己的项目经历,把这些问题“讲成故事”,面试时才能从容不迫、脱颖而出。

祝你面试顺利,拿下面试!💼✨

往期精彩

数仓新手开发如何撰写设计文档?

京东数据研发一面:用HiveSQL计算新用户近7日留存率(不允许使用JOIN)

JD物流运输面试SQL题:物流时效分析实战

SQL面试提问:如何精准计算用户页面停留时长(含连续访问合并与异常处理)

面试提问:数据开发时,数据探查到底探查的是什么?应如何探查,探查的思路是什么?

数仓建设中,如何做基线管理?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值