数据仓库面试题

news2024/12/1 0:25:46

1 思维导图&数仓常见面试题

在这里插入图片描述

2 题目

1. 数据仓库是什么?

  数据仓库是一个面向主题的(订单、支付、退单等)、集成的(整合多个信息源的大量数据)、非易失的(一般不会进行删除和修改操作)且随时间变化(不是数据会变,而是数据量随着时间增加)的数据集合,主要用于存储历史数据,然后通过分析整理进而提供数据支持和辅助决策。

2. 数据仓库和数据库有什么区别

  1. 数据库中主要存放在线数据,数据仓库中主要存放历史数据,并且存放的数据量比数据库要多的多。
  2. 数据库主要用于业务处理(比如支付系统),数据仓库主要用于数据分析。
  3. 数据库的设计要避免冗余,而数据仓库通常会引入冗余,减少后面分析时的join操作。

3. 为什么要对数据仓库分层

  1. 将复杂的需求简单化(我们通过将复杂的问题分解为多个步骤来完成,每一层只处理单一的步骤,比较容易和理解)
  2. 提高数据的复用性,比如需要中间层的数据,可以直接查询中间层的数据,不必从头开始计算。
  3. 补充说明:数据仓库就是一种以空间换时间的架构

4. 为什么需要数据建模

  随着数据的爆发式增长,如何对数据进行有序、有结构地分类组织和存储是一大挑战。数据建模是对数据存储和组织的一种方法,它强调从业务数据存储和使用角度合理存储数据。有了适合业务的数据模型之后,那么大数据就可以获得以下好处:性能、成本、效率、质量

5. 经典的数据仓库建模方法论有哪些

  • ER模型,这个模型是符合3范式的,它的出发点就是整合数据,将各个系统中的数据按主题进行分类,但是不能直接用于分析决策。
  • 维度模型,维度建模以数据分析作为出发点,为数据分析服务,因此它关注的重点的用户如何更快的完成需求分析以及如何实现较好的大规模复杂查询的响应性能,现在大多数数仓的搭建都是基于维度模型进行搭建的。
  • 区别:ER模型冗余少,在大规模数据跨表分析中,会存在多表关联,大大降低了执行效率。

6. 数仓相关的名词术语解释,比如数据域、业务过程、衍生指标

  • 数据域:将业务过程或者维度进行抽象的集合,例如交易域、商品域等都是数据域。
  • 业务过程:一个不可拆分的行为事件,例如下单、支付、退款等都是业务过程。
  • 维度:用于分析事实所需要的环境,比如时间维度,地理维度等。
  • 维度属性:维度属性属于一个维度,比如地理维度中的国家名称、身份名称都是维度属性
  • 原子指标:原子指标基于某一业务过程的度量值,是业务定义中不可再拆解的指标,原子指标的核心功能就是对指标的聚合逻辑进行了定义。原子指标包含三要素,分别是业务过程度量值聚合逻辑
  • 派生指标:基于原子指标,其与原子指标的关系如下图所示。与原子指标不同,派生指标通常会对应实际的统计需求
    在这里插入图片描述
  • 衍生指标:衍生指标是在一个或多个派生指标的基础上,通过各种逻辑运算复合而成的。例如比率、比例等类型的指标。衍生指标也会对应实际的统计需求。
    在这里插入图片描述

7. 派生指标的种类

  • 事务型指标:对业务活动进行衡量的指标。比如订单支付金额、新发商品数、新增注册会员数。
  • 存量型指标:对实体对象(比如商品、会员)某些状态的统计。
  • 复合型指标:就是衍生指标

8. 经典数仓分层架构

  • ODS层:把业务系统、日志等数据几乎无处理地同步到ODS层中
  • 明细数据层(DWD层):该层存储维度模型的事实表
  • 数据汇总层(DWS层):
  • 公共维度层(DIM层):该层存储维度模型的维度表
  • 应用数据层(ADS层):

9. 模型设计的基本原则

  • 高内聚低耦合:将业务相关、粒度相同地数据设计为同一个物理模型,将高频率同时访问地数据放在一起,将低频率同时访问地数据分开存储。
  • 核心模型于扩展模型分离:核心模型包括地字段支持常用地核心业务,扩展模型包括地字段支持个性化或少量应用的需要。
  • 公共处理逻辑下沉:越是公用的处理逻辑,越应该在数据调度依赖的底层进行封装于实现,不要让公共逻辑多出同时存在。
  • 成本与性能平衡:适当的数据冗余可以换取查询和刷新性能,但不要过度冗余。
  • 数据可回滚:处理逻辑不变,在不同时间多次运行,数据结果确定不变。
  • 一致性:具有相同含义的字段在不同的表中命名必须相同

10. 模型实施的具体步骤

在这里插入图片描述

  1. 数据调研:业务调研和需求分析
    • 业务调研目标是熟悉业务流程熟悉业务数据,需要将该业务所包含的每个业务过程一一列举出来。
    • 需求分析需要明确需求所需的业务过程维度
  2. 明确数据域: 根据业务情况进行纵向划分数据域。划分数据域的意义是便于数据的管理和应用。下面是电商离线数仓所需的所有业务过程及数据域划分详情
    在这里插入图片描述
  3. 构建业务总线矩阵:业务总线矩阵中包含维度模型所需的所有事实(业务过程)以及维度,以及各业务过程与各维度的关系。矩阵的行是一个个业务过程,列是一个个维度,行列的交点表示业务过程与维度的关系。
    在这里插入图片描述
    一个业务过程对应一张事务型事实表,一个维度对应一张维度表。
  4. 明确统计指标:原子指标、派生指标、衍生指标
    • 原子指标:原子指标基于某一业务过程度量值,是业务定义中不可再拆解的指标,原子指标的核心功能就是对指标的聚合逻辑进行了定义。包含三要素:业务过程度量值聚合逻辑
    • 派生指标:派生指标 = 原子指标 + 统计周期 + 业务限定 + 统计粒度。与原子指标不同,派生指标通常会对应实际的统计需求。
      在这里插入图片描述
    • 衍生指标:衍生指标是在一个或多个派生指标的基础上,通过各种逻辑运算复合而成的。例如比率、比例等类型的指标。衍生指标也会对应实际的统计需求。
      在这里插入图片描述
  5. 维度模型设计:维度模型的设计参照上得到的业务总线矩阵即可。事实表存储在DWD层,维度表存储在DIM层。
  6. 汇总模型设计:汇总模型的设计参考指标体系(主要是派生指标)即可。汇总表与派生指标的对应关系是,一张汇总表通常包含业务过程相同、统计周期相同、统计粒度相同的多个派生指标。
  7. 开发
  8. 调度

11. 维度建模有哪几种模型

  • 星型模型:最常用的维度建模方式,核心就是以事实表为中心,所有的维度表直接连接在事实表上。
    在这里插入图片描述

  • 雪花模型:维度表可以再连接其他维度表,有点类似于3NF模型
    在这里插入图片描述

12. 维度建模中表的类型

  • 维度表:一张维度表就表示对一个对象的一些描述信息。每个维度表都包含单一的主键列,和一些对该主键的描述信息,通常维度表会很宽。
  • 事实表:一个事实表就表示对业务过程的描述,比如下单、支付。每个事实表都包含若干个维度外键,若干退化维度(维度属性存储到事实表中,减少关联),和数值型的度量值,通常事实表都是细长(记录数多,列数少)。

13. 维度表的设计过程

维度表是维度建模的基础和灵魂。事实表围绕业务过程进行设计,维度表围绕业务过程所处的环境进行设计。维度表主要包含一个主键和各种维度字段,维度字段称为维度属性。

  1. 选择维度
  2. 确定主维表
  3. 确定相关维度
  4. 确定维度属性

14. 维度表的设计中有哪些值得注意的地方

  • 尽可能生成丰富的维度属性
  • 尽可能详细的对维度属性进行文字解释
  • 尽量沉淀通用的维度属性

15. 维表整合的两种表现形式

  1. 垂直整合
  2. 水平整合

16. 如何处理维度的变化

  维度属性通常不是静态的,而是会随时间变化的,数据仓库的一个重要特点就是反映历史的变化,所以如何保存维度的历史状态是维度设计的重要工作之一。保存维度数据的历史状态,通常有以下两种做法,分别是全量快照表和拉链表。

  1. 全量快照表:离线数据仓库的计算周期通常为每天一次,所以可以每天保存一份全量的维度数据。
    • 优点是简单而有效,开发和维护成本低,且方便理解和使用。
    • 缺点是浪费存储空间,尤其是当数据的变化比例比较低时。
  2. 拉链表:拉链表的意义就在于能够更加高效的保存维度信息的历史状态。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

17. 事实表设计的八大原则

  1. 尽可能包含所有与业务过程相关的事实
  2. 只选择与业务过程相关的事实
  3. 分解不可加事实为可加事实
  4. 在选择维度和事实之前必须先声明粒度
  5. 在同一个事实表中不能有不同粒度的事实
  6. 事实的单位要保持一致
  7. 对事实的null值要处理
  8. 使用退化维度提高事实表的易用性

18. 事实表的设计过程

  1. 选择业务过程以及确定事实表类型
  2. 声明粒度
  3. 确定维度
  4. 确定事实:声明度量值

19. 事实表有哪几种类型

  • 事务事实表:事务事实表用来记录各业务过程,它保存的是各业务过程的原子操作事件,即最细粒度的操作事件。粒度是指事实表中一行数据所表达的业务细节程度。事务型事实表可用于分析与各业务过程相关的各项统计指标
  • 周期快照事实表:周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,主要用于分析一些存量型(例如商品库存,账户余额)或者状态型(空气温度,行驶速度)指标。
  • 累计快照事实表:累计快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,如交易流程中的下单、支付、发货、确认收货业务过程。累积型快照事实表主要用于分析业务过程之间的时间间隔等需求。比如用户下单到支付的平均时间间隔,使用累积型快照事实表进行统计,就能避免两个事务事实表的关联操作,从而变得十分简单高效。

20. 多事务事实表如何对事务进行处理

  主要有两种方法对事实进行处理

  1. 不同业务过程的事实使用不同的事实字段进行存放。比如淘宝交易事务事实表,表中会设置下单度量,支付度量,完结度量等字段。
  2. 不同业务过程的事实使用同一个事实字段进行存放,但增加一个业务过程标签。比如收藏事务事实表,表中会设置收藏删除类型,以及收藏删除度量等字段。

关于上述两种方法如何选择?

  • 当不同业务过程的度量比较相似时,采用第二种方式;反之,当不同业务过程的度量差异比较大时,采用第一种方式。

21. 单事务事实表和多事务事实表哪种设计更好

  主要从五个方面来进行分析

  • 业务过程:
    • 对于单事务事实表,一个业务过程建议一张事实表,只反映一个业务过程的事实;对于多事务事实表,在同一个事实表中反映多个业务过程的事实。多个业务过程是否放到同一张事实表中,首先需要分析不同业务之间的相似性。
  • 粒度和维度
    • 在确定好业务过程后,需要基于不同的业务过程确定粒度和维度,当不同业务过程的粒度相同,同时拥有相似的维度时,此时就可以考虑采用多事务事实表。如果粒度不同,则必定时不同的事实表。比如交易中支付和发货有不同的粒度,则无法将发货业务过程放到淘宝交易事务事实表中。
  • 事实
    • 如果单一业务过程的事实较多,同时不同业务过程的事实又不相同,则可以考虑单事务事实表,处理更加清晰;若使用多事务事实表,则会导致事实表零值或空值较多。
  • 下游业务使用
    • 单事务事实表对于下游用户更容易理解,关注哪个业务员过程就使用哪张事实表;而多事务事实表包含多个业务过程,用户使用往往较为困惑。
  • 计算存储成本
    • 当业务过程来源于同一个业务系统,具有相同的粒度和维度,且维度较多而事实不多时,此时可以考虑多事务事实表,不仅加工计算成本较低,同时在存储上也相对节省。

22. 周期快照事实表的设计过程

  1. 确定粒度
    • 周期型快照事实表的粒度可由采样周期和维度描述,故确定采样周期和维度后即可确定粒度。
    • 采样周期通常选择每日。
    • 维度可根据统计指标决定,例如指标为统计每个仓库中每种商品的库存,则可确定维度为仓库和商品。
    • 确定完采样周期和维度后,即可确定该表粒度为每日-仓库-商品。
  2. 确认事实
    • 事实也可根据统计指标决定,例如指标为统计每个仓库中每种商品的库存,则事实为商品库存。

23. 累计快照表的设计过程

  1. 选择业务过程
    • 选择一个业务流程中需要关联分析的多个关键业务过程,多个业务过程对应一张累积型快照事实表。
  2. 声明粒度
    • 精确定义每行数据表示的是什么,尽量选择最小粒度。
  3. 确认维度
    • 选择与各业务过程相关的维度,需要注意的是,每各业务过程均需要一个日期维度。
  4. 确认事实
    • 选择各业务过程的度量值。

24. 累计快照事实表的特点

  1. 数据不断更新
  2. 对应多业务过程日期

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1391866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Java Stream API获取子部门的所有父级部门

使用Java Stream API获取子部门的所有父级部门 在数据库表中,经常会有包含层次结构的部门信息表。本博客将使用Java语言和Stream API演示如何获取给定子部门的所有父级部门,并在代码中加入详细注释。 1. 创建 Department 类 首先,我们需要定…

经典目标检测YOLO系列(二)YOLOV2的复现(1)总体网络架构及前向推理过程

经典目标检测YOLO系列(二)YOLOV2的复现(1)总体网络架构及前向推理过程 和之前实现的YOLOv1一样,根据《YOLO目标检测》(ISBN:9787115627094)一书,在不脱离YOLOv2的大部分核心理念的前提下,重构一款较新的YOLOv2检测器,来对YOLOV2有…

ADA-YOLO:YOLOv8+注意力+Adaptive Head,mAP提升3%

生物医学图像分析中的目标检测和定位至关重要,尤其是在血液学领域,检测和识别血细胞对于诊断和治疗决策至关重要。虽然基于注意力的方法在各个领域中目标检测方面取得了显著的进展,但由于医学影像数据集的独特挑战,其在医学目标检…

cookie和session的工作过程和作用:弥补http无状态的不足

cookie是客户端浏览器保存服务端数据的一种机制。当通过浏览器去访问服务端时,服务端可以把状态数据以key-value的形式写入到cookie中,存储到浏览器。浏览器下次去服务服务端时,就可以把这些状态数据携带给服务器端,服务器端可以根…

C++I/O流——(3)文件输入/输出(第一节)

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 含泪播种的人一定能含笑收获&#xff…

HBase学习二:RegionServer详解

1、内部结构 RegionServer是HBase系统中最核心的组件,主要负责用户数据写入、读取等基础操作。RegionServer组件实际上是一个综合体系,包含多个各司其职的核心模块:HLog、MemStore、HFile以及BlockCache。 2、HLog 3、MemStore 4、HFile…

08- OpenCV:形态学操作(膨胀与腐蚀 、提取水平与垂直线)

目录 前言 一、膨胀(Dilation)与 腐蚀(Erosion) 二、形态学操作 1、开操作(Opening) 2、闭操作(Closing) 3、形态学梯度(Morphological Gradient) 4、…

【数学建模】美赛备战笔记 01 美赛指南与竞赛全流程

美赛指南 整篇论文需要在25页内。 六道赛题特点: A、B题涉及到微分方程和物理概念较多,需要一定的专业知识; C题常常涉及到时间序列、机器学习; D题一般是运筹学/网络科学,图论、优化问题,涉及到的概念多…

计算机视觉的应用

计算机视觉(Computer Vision)是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说,计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标,计算机视觉结合了图像处理、机器学习、模…

【C++11】部分新特性

目录 1. 统一的列表初始化1.1 {}初始化1.2 std::initializer_list 2. 声明2.1 auto2.2 decltype 3. nullptr4. 右值引用和移动语义4.1 左值引用和右值引用4.2 左右值引用比较4.3 右值引用使用场景和意义4.4 完美转发 5. 新的类功能6. lambda表达式6.1 语…

vue安装、打包、发布

一.安装: 打开cmd命令行依次输入下面命令: 1. npm install -g vue/cli 2. vue create vue-demo(项目名) 3. 运行项目 npm run serve 二.打包: 在vscode打开终端输入以下命令: npm run build 打包成功后会生成一个dist文件夹&…

Python图像处理【18】边缘检测详解

边缘检测详解 0. 前言1. 图像导数2. LoG/zero-crossing2.1 Marr-Hildteth 算法 3. Canny 与 holistically-nested 算法3.1 Canny 边缘检测3.2 holistically-nested 边缘检测 小结系列链接 0. 前言 边缘是图像中两个区域之间具有相对不同灰级特性的边界,或者说是亮度…

好用的内外网快速传输大文件方法

在信息化时代,数据已经成为各行各业的关键资产,数据的传输和交换方式直接影响着数据价值的体现。在众多场景下,我们需要在不同的网络环境中进行文件传输,如同一个局域网内或者互联网上。这时涉及到内外网的概念。 内外网指的是在不…

PromptCast-时间序列预测的好文推荐

前言 这是关于大语言模型和时间序列预测结合的好文推荐,发现这篇文章,不仅idea不错和代码开源维护的不错,论文也比较详细(可能是顶刊而不是顶会,篇幅大,容易写清楚),并且关于它的Br…

架构篇02-架构设计的历史背景

文章目录 机器语言(1940 年之前)汇编语言(20 世纪 40 年代)高级语言(20 世纪 50 年代)第一次软件危机与结构化程序设计(20 世纪 60 年代~20 世纪 70 年代)第二次软件危机与面向对象&…

什么是防火墙?

目录 什么是防火墙,为什么需要防火墙?防火墙与交换机、路由器对比防火墙和路由器实现安全控制的区别防火墙的发展史1989年至1994年1995年至2004年2005年至今 什么是防火墙,为什么需要防火墙? “防火墙”一词起源于建筑领域&#x…

十一、Qt Poppler打包

《一、QT的前世今生》 《二、QT下载、安装及问题解决(windows系统)》《三、Qt Creator使用》 ​​​ 《四、Qt 的第一个demo-CSDN博客》 《五、带登录窗体的demo》 《六、新建窗体时,几种窗体的区别》 《七、Qt 信号和槽》 《八、Qt C 毕业设计》 《九、Qt …

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用相机日志跟踪功能(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用相机日志跟踪功能(C) Baumer工业相机Baumer工业相机NEOAPI SDK和短曝光功能的技术背景Baumer工业相机通过NEOAPI SDK使用相机日志跟踪功能1.引用合适的类文件2.通过NEOAPI SDK使用相机日志跟踪功能3.通…

java绩效考核系统

一、系统介绍 本系统为绩效考核系统,系统分为三大模块:考核设置,绩效考核,系统管理。 可满足小企业对员工进行考核。本系统最大特色是有强大和灵活的权限控制功能,所有菜单,按钮功能均可由管理通过配置来控…

【开源】基于JAVA语言的网上药店系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药品档案模块2.4 药品订单模块2.5 药品收藏模块2.6 药品资讯模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 角色表3.2.2 药品表3.2.3 药品订单表3.2.4 药品收藏表3.2.5 药品留言表…