数据仓库面试题

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. 对应多业务过程日期

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于NLP的恶意网页识别

基于NLP的恶意网页识别 基于NLP的恶意网页识别引言项目目录回顾优化HTML标签提取结果使用预训练模型Fine-tune数据处理和模型训练模型训练与评估模型导出部署与预测总结 基于NLP的恶意网页识别 引言 欢迎阅读《 基于NLP的恶意网页识别》,在前三篇中,我…

【LV12 DAY21 PWM实验】

PWM控制—脉冲宽度调制 通过对脉冲宽度的调制,来获得所需要的波形。 #include "exynos_4412.h"void delay(unsigned int time){while(time--);}int main(){//1.配置GPD0_0 PWM输出功能GPD0.CONGPD0.CON &(~(0XF)) | 0X2;//2.设置PWM一级分频100P…

Flask框架小程序后端分离开发学习笔记《1》网络知识

Flask框架小程序后端分离开发学习笔记《1》网络知识 Flask是使用python的后端,由于小程序需要后端开发,遂学习一下后端开发。 一、网址组成介绍 协议:http,https (https是加密的http)主机:g.cn zhihu.com之类的网址…

视频转码:最简单的批量MP4视频转换方法,视频剪辑的技巧

随着数字媒体技术的快速发展,视频格式的转换和编辑已成为日常生活中常见的需求。经常遇到要把不同格式的视频转换成MP4格式的情况,例如在某些播放器或设备上播放,或者传输和分享。接下来看下云炫AI智剪如何简单的批量转换MP4视频方法&#xf…

实战案例 - 医疗行业攻击面发现及管理

HIS 入侵案例 医院委托第三方安全公司进行渗透测试 公网域名发现 HIS 系统,通过域名访问并进行入侵 植入木马后,被 HIDS 发现并处置 通过 HIDS 发现 HIS 系统存在已知安全漏洞 通报院方负责人进行处理 院方负责人 仅关闭对应系统域名解析 HW 演练时…

爬虫IP代理池的搭建与使用指南

目录 前言 一、IP代理池的搭建 1. 安装依赖库 2. 获取代理IP 3. 验证代理IP 4. 搭建代理池 5. 定时更新代理池 二、使用IP代理池 总结 前言 在进行网络爬虫任务时,为了避免被目标网站封禁IP,我们可以使用IP代理池来进行IP的轮换,达…

linux修改文件名

1.使用 mv 命令:mv 命令用于移动或重命名文件。要重命名一个文件,你可以将原始文件名作为第一个参数,新的文件名作为第二个参数传递给 mv 命令。例如,要将 oldfile.txt 重命名为 newfile.txt,可以运行以下命令&#xf…

【江科大STM32合集】day2按键控制LED光敏传感器控制峰鸣器

【STM32合集】day2按键控制LED&光敏传感器控制峰鸣器 电路基础c语言基础main.ckey.c结果 实现一个键开关灯实验结果避坑 电路基础 运算放大器-在江科大51单片机b站视频(AD/DA)复习 原理:两个极端 同相输入端电压 》反相输入端 电压输出最…

3DMax的位图是什么? 3DMax的位图介绍

在3dmax建模中,使用贴图时的位图的频率是很高的。主要原因便就是位图就是我们平常说的图片,有各种格式的图片,能把这张图片贴到物体的表面,呈现效果进行渲染。 3damx的位图支持多种格式,比如jpg、png等等。 当然常用的…

第8章-第4节-Java中字节流的缓冲流

1、缓冲流:属于高级IO流,并不能直接读写数据,需要依赖于基础流。缓冲流的目的是为了提高文件的读写效率?那么是如何提高文件的读写效率的呢? 在内存中设置一个缓冲区,缓冲区的默认大小是8192字节&#xff…

HarmonyOS4.0 系列——06、渲染之条件渲染、循环渲染以及懒加载渲染

HarmonyOS4.0 系列——06、渲染之条件渲染、循环渲染以及懒加载渲染 if/else:条件渲染 ArkTS 提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用 if、else 和 else if 渲染对应状态下的 UI 内容。 写法和 TS 的一样,简单看一下即可…

java的object类

object类 看下object类的结构: Object是所有类的父类,任何类都默认继承Object。在Java中,如果没有指定父类,则默认为Object。这是因为Object类是Java中最基本的类,也是所有类的祖先 public String toString() : 这…

Windows下Python+PyCharm+miniconda+Cuda/GPU 安装步骤

1. 官网安装Python 3.9 Python Release Python 3.9.0 | Python.org 2. 安装pycharm https://download.jetbrains.com/python/pycharm-professional-2023.3.2.exe 3. 安装miniconda Miniconda — miniconda documentation 4. 安装完miniconda 创建虚拟环境 conda create …

Linux命令之用户账户管理whoami,useradd,passwd,chage,usermod,userdel的使用

1、查看当前用户账户 2、切换用户为root用户 3、新建用户user1,给用户user1设置密码为password123 4、新建用户user2,UID为510,指定其所属的私有组为group1(group1组的标识符为500),用户的主目录为/home/us…

6.1810: Operating System Engineering 2023 <Lab7 lock: Parallelism/locking>

一、本节任务 二、要点 2.1 文件系统(file system) xv6 文件系统软件层次如下: 通过路径树我们可以找到相应的文件: fd(文件描述符)是进程用来标识其打开的文件的手段,每个进程有自己的文件…

C++学习笔记(三十三):c++ 宏定义

本节对c的宏定义进行描述。c使用预处理器来对宏进行操作,我们可以写一些宏来替换代码中的问题,c的宏是以#开头,预处理器会将所有的宏先进行处理,之后在通过编译器进行编译。宏简单说就是文本替换,可以替换代码中的任何…

高级分布式系统-第15讲 分布式机器学习--概念与学习框架

高级分布式系统汇总:高级分布式系统目录汇总-CSDN博客 分布式机器学习的概念 人工智能蓬勃发展的原因:“大” 大数据:为人工智能技术的发展奠定了坚实的物质基础。 大规模机器学习模型:具备超强的表达能力,可以解决…

CMU15-445-Spring-2023-Project #3 - 前置知识(lec10-14)

Lecture #10_ Sorting & Aggregation Algorithms Query Plan 数据库系统会将 SQL 编译成查询计划。查询计划是一棵运算符树。 Sorting DBMS 需要对数据进行排序,因为根据关系模型,表中的tuple没有特定的顺序。排序使用 ORDER BY、GROUP BY、JOIN…

如何在Windows 10/11的防火墙中禁止和允许某个应用程序,这里提供详细步骤

想阻止应用程序访问互联网吗?以下是如何通过简单的步骤阻止和允许Windows防火墙中的程序。​ 一般来说,大多数用户永远不需要担心应用程序访问互联网。然而,在某些情况下,你需要限制应用程序访问互联网。 例如,有问题…

高级定时器

本节主要介绍以下内容: 定时器简介 高级定时器功能框图讲解 一、定时器简介 定时器功能 :定时、输出比较、输入捕获、断路输入 定时器分类 :基本定时器、通用定时器、高级定时器 定时器资源 :F103有2个高级定时器、4个通…