0


数据仓库面试总结

文章目录

1.什么是数据仓库?

  1. 概念 存储数据的仓库, 主要是用于存储过去既定发生的历史数据, 对这些数据进行数据分析的操作, 从而对未来提供决策支持
  2. 四大特征
  • 面向于主题的: 面向于分析, 分析的内容是什么 什么就是我们的主题
  • 集成性: 数据是来源于各个数据源, 将各个数据源数据汇总在一起
  • 非易失性(稳定性): 存储在数据仓库中数据都是过去既定发生数据, 这些数据都是相对比较稳定的数据, 不会发生改变
  • 时变性: 随着的推移, 原有的分析手段以及原有数据可能都会出现变化(分析手动更换, 以及数据新增)

2.ETL是什么?

抽取 转换 加载

从数据源将数据灌入到ODS层, 以及从ODS层将数据抽取出来, 对数据进行转换处理工作, 最终将数据加载到DW层, 然后DW层对数据进行统计分析, 将统计分析后的数据灌入到DA层, 整个全过程都是属于ETL范畴

狭义上ETL: 从ODS层到DW层过程

3.数据仓库和数据库的区别(OLTP和OLAP的区别)*

OLTP:联机事务处理
OLAP:联机分析处理

  • 数据库(OLTP): 面向于事务(业务)的 , 主要是用于捕获数据 , 主要是存储的最近一段时间的业务数据, 交互性强,一般不允许出现数据冗余
  • 数据仓库(OLAP): 面向于分析(主题)的 , 主要是用于分析数据, 主要是存储的过去历史数据 , 交互性较弱 ,可以允许出现一定的冗余

在这里插入图片描述

4.数据仓库和数据集市的区别 *

  • 数据仓库其实指的集团数据中心: 主要是将公司中所有的数据全部都聚集在一起进行相关的处理操作 (ODS层),此操作一般和主题基本没有什么太大的关系
  • 数据的集市(小型数据仓库): 在数据仓库基础之上, 基于主题对数据进行抽取处理分析工作, 形成最终分析的结果一个数据仓库下, 可以有多个数据集市

5.维度分析

5.1 什么是维度?

维度一般指的分析的角度, 看待一个问题的时候, 可以多个角度来看待, 而这些角度指的就是维度

比如: 有一份2020年订单数据, 请尝试分析
可以从时间, 地域 , 商品, 来源 , 用户…

  1. 维度的分类: - 定性维度: 指的计算每天 每月 各个的维度 , 一般来说定性维度的字段都是放置在group by 中 - 定量维度: 指的统计某一个具体的维度或者某一个范围下信息, 比如说: 2020年度订单额, 统计20~30岁区间人群的人数 ,一般来说这种维度的字段都是放置在where中

维度的下钻和上卷: 以某一个维度为基准, 往细化统计的过程称为下钻, 往粗粒度称为上卷
比如: 按照 天统计, 如果需要统计出 小时, 指的就是下钻, 如果需要统计 季度 月 年, 称为上卷统计

5.2什么是指标?

指标是衡量事务发展的标准,也叫度量,如价格,销量等;指标可以求和、求平均值等计算。
指标的分类:

  • 绝对指标: 计算具体的值指标 count() sum() max() min() avg()
  • 相对指标: 计算比率问题的指标 转化率, 流失率, 同比

6.什么是数仓建模?*

数仓建模指的是如何在hive中构建表, 数仓建模中主要提供两种理论来进行数仓建模操作: 三范式建模维度建模理论

  • 三范式建模: 主要是存在关系型数据库建模方案上, 主要规定了比如建表的每一个表都应该有一个主键, 数据要经历的避免冗余发生等等
  • 维度建模: 主要是存在分析性数据库建模方案上, 主要一切以分析为目标, 只要是利于分析的建模, 都是OK的, 允许出现一定的冗余, 表也可以没有主键

维度建模的两个核心概念:事实表和维度表

7.事实表

事实表: 事实表一般指的就是分析主题所对应的表,每一条数据用于描述一个具体的事实信息, 这些表一般都是一坨主键(外键)和描述事实字段的聚集
在这里插入图片描述
事实表的分类:

  1. 事务事实表: 保存的是最原子的数据,也称“原子事实表”或“交易事实表”。沟通中常说的事实表,大多指的是事务事实表。
  2. 周期快照事实表: 周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等 周期表由事务表加工产生
  3. 累计快照事实表: 完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点

7.维度表

维度表: 指的在对事实表进行统计分析的时候, 基于某一个维度, 这个维度信息可能在其他表中, 而这些表就是维度表

维度表并不一定存在, 但是维度是一定存在:
比如: 根据用户维度进行统计, 如果在事实表只存储了用户id, 此时需要关联用户表, 这个时候就是维度表
比如: 根据用户维度进行统计, 如果在事实表不仅仅存储了用户id,还存储用户名称, 这个时候有用户维度, 但是不需要用户表的参与, 意味着没有这个维度表

维度表的分类:

  • 高基数维度表: 指的表中的数据量是比较庞大的, 而且数据也在发生的变化 例如: 商品表, 用户表
  • 低基数维度表: 指的表中的数据量不是特别多, 一般在几十条到几千条左右,而且数据相对比较稳定 例如: 日期表,配置表,区域表

8.维度建模的三种模型

  1. 星型模型
  • 特点: 只有一个事实表, 那么也就意味着只有一个分析的主题, 在事实表的周围围绕了多个维度表, 维度表与维度表之间没有任何的依赖
  • 反映数仓发展初期最容易产生模型
  1. 雪花模型
  • 特点: 只有一个事实表, 那么也就意味着只有一个分析的主题, 在事实表的周围围绕了多个维度表, 维度表可以接着关联其他的维度表
  • 反映数仓发展出现了畸形产生模型, 这种模型一旦大量出现, 对后期维护是非常繁琐, 同时如果依赖层次越多, SQL分析的难度也会加大
  • 此种模型在实际生产中,建议尽量减少这种模型产生
  1. 星座模型
  • 特点: 有多个事实表, 那么也就意味着有了多个分析的主题, 在事实表的周围围绕了多个维度表, 多个事实表在条件符合的情况下, 可以共享维度表
  • 反映数仓发展中后期最容易产生模型

星形模型和雪花模型有什么优劣?*

  • 星形模型结构简单,易于理解和使用,并且查询性能也高。但是维度表可能包含冗余数据,如果维度表非常大或包含复杂的层次结构,星形模型可能难以扩展。
  • 对于具有复杂关系的维度,雪花模型更为适合,可以更好地表示数据的层次结构。但是查询性能就比较低了,并且维护也比较复杂,建议少用。

9.缓慢渐变维(SCD)*

缓慢渐变维,即维度中的属性可能会随着时间发生改变

解决办法:

  • SCD1: 直接覆盖, 不维护历史变化数据 主要适用于: 对错误数据处理
  • SCD2:不删除、不修改已存在的数据, 当数据发生变更后, 会添加一条新的版本记录的数据, 在建表的时候, 会多加两个字段(起始时间, 截止时间), 通过这两个字段来标记每条数据的起止时间 , 一般称为拉链表 好处: 适用于保存多个历史版本, 方便维护实现 弊端: 会造成数据冗余情况, 导致磁盘占用率提升
  • SCD3: 通过在增加列的方式来维护历史变化数据 好处: 减少数据的冗余, 适用于少量历史版本的记录以及磁盘空间不是特别充足情况 弊端: 无法记录更多的历史版本, 以及维护比较繁琐

10.数据仓库分层

10.1为什么要分层?

分层可以使数据层次清晰、依赖关系直观

数据分层却可以给我们带来如下的好处:

  1. 清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解。
  2. 复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题。
  3. 便于维护:当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
  4. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少重复开发的工作量。
  5. 高性能:数据仓库的构建将大大缩短获取信息的时间,数据仓库作为数据的集合,所有的信息都可以从数据仓库直接获取,尤其对于海量数据的关联查询和复杂查询,所以数据仓库分层有利于实现复杂的统计需求,提高数据统计的效率。

10.2数仓分层 *

  • ODS层: 源数据层 作用: 对接数据源, 和数据源的数据保持相同的粒度(将数据源的数据完整的拷贝到ODS层中) 注意: 如果数据来源于文本文件, 可能会需要先对这些文本文件进行预处理(spark)操作, 将其中不规则的数据, 不完整的数据, 脏乱差的数据先过滤掉, 将其转换为一份结构化的数据, 然后灌入到ODS层
  • DW层: 数据仓库层 作用: 进行数据分析的操作- DWD层: 明细层 作用: 用于对ODS层数据进行清洗转换工作 , 以及进行少量的维度退化操作 少量: 1) 将多个事实表的数据合并为一个事实表操作 2) 如果维度表放置在ODS层 一般也是在DWD层完成维度退化- DWM层: 中间层 作用: 1) 用于进行维度退化操作 2) 用于进行提前聚合操作(周期快照事实表)- DWS层: 业务层 作用: 进行细化维度统计分析操作
  • DA层: 数据应用层 作用: 存储DW层分析的结果, 用于对接后续的应用(图表, 推荐系统…)例如: 比如DWS层的数据表完成了基于订单表各项统计结果信息, 但是图表只需要其中销售额, 此时从DWS层将销售额的数据提取出来存储到DA层
  • DIM层: 维度层 作用: 存储维度表数据

10.3什么叫做维度退化?

维度退化是为了减少维度表的关联工作

  1. 做法: 将数据分析中可能在维度表中需要使用的字段, 将这些字段退化到事实表中,
  2. 这样后续在基于维度统计的时候, 就不需要在关联维度表, 事实表中已经涵盖了维度数据了
  3. 例如: 订单表, 原有订单表中只有用户id, 当我们需要根据用户维度进行统计分析的时候,
  4. 此时需要关联用户表, 找到用户的名称, 那么如果我们提前将用户的名称放置到订单表中,
  5. 那么是不是就不需要关联用户表, 而则就是维度退化
  6. 好处: 减少后续分析的表关联情况
  7. 弊端: 造成数据冗余

11.构建数据仓库相关组件

11.1oozie

  1. 什么是oozie Oozie是一个用于管理Apache Hadoop作业的工作流调度程序系统。Oozie由Cloudera公司贡献给Apache的基于工作流引擎的开源框架,是用于Hadoop平台的开源的工作流调度引擎,是用来管理Hadoop作业,属于web应用程序,由Oozie client和Oozie Server两个组件构成,Oozie Server运行于Java Servlet容器(Tomcat)中的web程序。
  2. 什么是工作流?工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。
  3. 能够使用工作流完成的业务一般具有什么特点呢?
  • 整个业务流程需要周期性重复干
  • 整个业务流程可以被划分为多个阶段
  • 每一个阶段存在依赖关系,前序没有操作, 后续也无法执行

如果发现实际生产中的某些业务满足了以上特征, 就可以尝试使用工作流来解决

11.2sqoop

一个用户进行数据的导入导出的工具, 主要是将关系型的数据库(MySQL, oracle…)导入到hadoop生态圈(HDFS,HIVE,Hbase…) , 以及将hadoop生态圈数据导出到关系型数据库中

12. 全量和增量

在进行数据统计分析的时候, 一般来说, 第一次统计分析都是全量统计分析 而后续的操作, 都是在结果基础上进行增量化统计操作

  • 全量统计: 需要面对公司所有的数据进行统计分析, 数据体量一般比较大的 解决方案: 采用分批次执行(比如按年)
  • 增量统计: 一般是以T+1模式统计, 当前的数据, 在第二天才会进行统计操作 每一天都是统计上一天的数据

13. 如何保证数据仓库中的数据质量?*

保证数据仓库中的数据质量是数据仓库设计和维护中的一个关键问题。

  1. 数据清洗和转换(ETL)
  • 数据清洗:在加载数据到数据仓库之前,进行数据清洗以删除重复数据、修正错误数据和处理缺失值。
  • 数据转换:将数据从源系统的格式转换为数据仓库的格式,确保数据一致性。例如,统一日期格式、规范化名称等。
  1. 数据校验和验证
  • 数据完整性检查:在数据加载过程中,进行数据完整性检查,确保所有必需字段都有值,引用的外键存在于相应的维度表中。
  • 范围检查:确保数值字段在合理的范围内,例如,确保销售数量为正数,日期字段在预期的范围内。
  • 一致性检查:确保数据在不同表之间的一致性。例如,确保产品在销售事实表中存在的同时,也在产品维度表中存在。
  1. 数据质量监控
  • 数据质量指标:定义和跟踪数据质量指标(例如,准确性、完整性、一致性、及时性),定期评估数据质量。
  • 数据质量报告:检查数据是否完整。
  1. 数据仓库设计最佳实践
  • 规范化和非规范化:在设计数据仓库时,根据需要进行适当的规范化和非规范化处理,平衡数据冗余和查询性能。
  • 维度建模:采用合适的维度建模方法(如星形模型、雪花模型),确保数据模型能够有效支持业务需求和数据质量管理。
  1. 数据源管理
  • 选择可信的数据源。
  • 定期更新数据源,确保数据的及时性和准确性。
  1. 数据备份和恢复
  • 定期备份数据仓库,以防止数据丢失和损坏。
  • 制定和实施数据恢复计划,确保在数据丢失或损坏时能够快速恢复数据。

14. 数据从业务数据库到数仓,怎么估算数仓需要的存储资源?

估算从业务数据库到数据仓库所需的存储资源涉及多个因素,包括数据的当前大小、增长率、数据压缩率、数据保留策略等。

  1. 评估当前数据量 表的数量和大小:识别业务数据库中各个表的大小。
  2. 预测数据增长 历史数据增长率:分析历史数据增长情况,计算月度或年度增长率。 业务需求变化:考虑未来业务增长和变化对数据增长的影响。
  3. 数据转换和清洗 数据筛选:确定哪些数据需要从业务数据库中转移到数据仓库。 数据清洗和转换:考虑在数据转换过程中是否有数据清洗和转换,可能会减少或增加数据量。

15. 数据仓库中指标下沉怎么做的?

数据仓库中的指标下沉(也称为指标细化或指标下推)是指将高层次的业务指标分解到更细粒度的数据层次,以便进行更深入的分析和洞察。例如,将销售总额分解为各个产品、地区、时间段的销售额。

16. 了解哪些OLAP引擎?

OLAP(Online Analytical Processing)引擎用于支持复杂的查询和分析,帮助用户在大规模数据集上进行快速的多维数据分析。以下是一些常见的OLAP引擎及其特点:
OLAP(Online Analytical Processing)引擎用于支持复杂的查询和分析,帮助用户在大规模数据集上进行快速的多维数据分析。以下是一些常见的OLAP引擎及其特点:

  1. Apache Hive

特点

  • 基于Hadoop的分布式数据仓库系统。
  • 支持SQL查询,适用于批处理分析。
  • 能处理大量结构化和半结构化数据。
  • 提供了丰富的UDF(用户定义函数)和多种文件格式支持(如Parquet、ORC、textfile)。

适用场景

  • 批量数据处理和ETL(Extract, Transform, Load)操作。
  • 大规模数据分析和报表生成。
  1. Druid

特点

  • 专为实时数据分析而设计的分布式数据存储系统。
  • 高效的列式存储和压缩。
  • 支持实时数据摄取、快速查询和历史数据存储。
  • 提供灵活的聚合和过滤功能。

适用场景

  • 实时数据分析和仪表盘。
  • 事件流处理和时序数据分析。
  1. ClickHouse

特点

  • 一个开源的列式数据库管理系统。
  • 优化的OLAP查询性能,支持实时数据分析。
  • 高度压缩的数据存储,支持丰富的SQL功能。
  • 分布式架构,适用于大规模数据集。

适用场景

  • 高吞吐量和低延迟的实时分析。
  • 广告、营销、监控和日志分析。

这些OLAP引擎各有优势和适用场景,选择合适的引擎需要根据具体的业务需求、数据规模、查询性能要求和技术生态系统来决定。

17. 怎么评估一个数仓模型的好坏?

评估一个数据仓库模型的好坏需要从多个角度进行全面考量,包括其结构设计、性能、灵活性、可维护性和满足业务需求的能力。以下是评估数据仓库模型的一些关键标准和方法:

  1. 数据模型设计
  • 数据模型的准确性:模型是否正确反映了业务需求和逻辑。
  • 数据一致性:数据是否在模型中保持一致,没有冗余和冲突。
  • 扩展性:模型设计是否允许容易地添加新维度、新度量或新的业务规则。
  • 适应性:模型能否灵活应对业务变化,快速调整和更新。
  1. 性能评估
  • 响应时间:数据仓库模型在处理复杂查询时的响应时间是否在可接受范围内。
  • 查询优化:是否使用了合适的索引、聚合和分区技术来优化查询性能。
  • ETL效率:数据加载(ETL)过程的效率如何,是否能够在规定的时间窗口内完成数据更新。
  • 数据刷新频率:数据仓库的刷新频率是否满足业务实时或近实时的需求。
  1. 数据质量
  • 数据验证:数据是否经过严格的验证和清洗,确保数据的准确性。
  • 一致性检查:数据是否在各个层次和系统间保持一致。
  • 缺失值处理:模型是否处理了所有可能的缺失值和异常值。
  • 数据约束:是否定义了适当的数据约束(如主键、外键),以确保数据的完整性。
  1. 维护性
  • 文档化:模型是否有详细的文档,包括数据字典、业务规则、ETL流程等。
  • 自动化:数据仓库维护过程是否有自动化工具支持,如自动备份、自动恢复、自动监控等。
  • 数据管理:是否有良好的数据治理实践,包括数据所有权、数据安全和隐私保护等。
  • 版本控制:模型更新和版本控制是否规范,能够追踪模型的变化和历史版本。
  1. 用户满意度
  • 可访问性:用户是否能够方便地访问和查询数据仓库中的数据。
  • 易用性:提供的查询工具和界面是否易于使用,能够支持用户的分析需求。
  • 业务支持:模型是否支持业务部门的分析需求,提供所需的报表和分析功能。
  • 用户反馈:收集用户反馈,评估模型在实际使用中的表现,及时改进。
  1. 成本效益
  • 成本控制:模型的开发和维护成本是否在可控范围内,是否实现了性价比最优。
  • 资源利用:模型设计是否高效利用了计算资源和存储资源,避免浪费。
  • ROI(投资回报率):数据仓库项目的投资回报是否满足预期,通过改进业务决策、提高效率等方式带来了显著的业务收益。
标签: 数据仓库 面试

本文转载自: https://blog.csdn.net/weixin_41767872/article/details/137381736
版权归原作者 啵啵玩转AI-BigData 所有, 如有侵权,请联系我们删除。

“数据仓库面试总结”的评论:

还没有评论