数仓面试题
1. 什么叫数据仓库?
数据仓库是一个面向主题的(Subject Oriented
)、集成的(Integrate
)、相对稳定的(Non-Volatile
)、反映历史变化(Time Variant
)的数据集合,它用于支持企业或组织的决策分析处理。数据仓库是为了便于多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。
- 首先,用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;
- 其次,对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改
数据仓库系统体系结构分为以下几个部分:
- 数据源
数据源是数据仓库系统的数据源泉,通常包括企业各类信息,包括存放于RDBMS中的各种业务处理数据和各类文档数据;各类法律法规、市场信息和竞争对手的信息等等; - ETL
- 数据仓库存储与管理
数据的存储和管理是整个数据仓库的核心,是关键。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定了其对外部数据的表现形式。从数据仓库的技术特点着手分析,来决定采用什么产品和技术来建立数据仓库,然后针对现有各业务系统的数据,进行抽取、清理,并有效集成,按照主题进行组织。数据仓库按照数据的覆盖范围可以分为企业级数据仓库和部门级数据仓库(通常称为数据集市)。 - OLAP
对需要的数据进行有效集成,按多维模型予以组织,以便进行多角度、多层次的分析,并发现趋势。其具体实现可以分为:- ROLAP(关系型在线分析处理): ROLAP基本数据和聚合数据均存放在RDBMS之中
- MOLAP(多维在线分析处理): MOLAP基本数据和聚合数据均存放于多维数据库中
- HOLAP(混合型线上分析处理): HOLAP基本数据存放于RDBMS之中,聚合数据存放于多维数据库中。
- BI工具
前端工具:主要包括各查询工具、数据分析工具、数据挖掘工具、种报表工具以及各种基于数据仓库或数据集市的应用开发工具。
3. 数据库和数据仓库有什么区别?
- 数据库是面向事务处的,数据是由日常的业务产生的,常更新;
数据仓库是面向主题的,数据来源于数据库或文件,经过一定的规则转换得到,用来分析的。 - 数据库一般是用来存储当前交易数据,数据仓库存储一般存储的是历史数据。
- 数据库的设计一般是符合三范式的,有最大的精确度和最小的冗余度,有利于数据的插入;
数据仓库的设计一般是星型的,有利于查询。
- 确定主题
即确定数据分析或前端展现的主题(例:某年某月某地区的啤酒销售情况)。主题要体现出某一方面的各分析角度(维度)和统计数值型数据(量度)之间的关系,确定主题时要综合考虑.
- 确定量度(指标)
确定主题后,需要考虑分析的技术指标(例:年销售额等等)。它们一般为数据值型数据,其中有些度量值不可以汇总;些可以汇总起来,以便为分析者提供有用的信息。量度是要统计的指标,必须事先选择恰当,基于不同的量度可以进行复杂关键性指标(KPI)的设计和计算。
- 确定事实数据粒度
确定量度之后,需要考虑该量度的汇总情况和不同维度下量度的聚合情况.例如在业务系统中数据最小记录到秒,而在将来分析需求中,时间只要精确到天就可以了,在ETL处理过程中,按天来汇总数据, 此时数据仓库中量度的粒度就是”天”。如果不能确认将来的分析需求中是否要精确的秒,那么,我们要遵循”最小粒度原则”,在数据仓库中的事实表中保留每一秒的数据,从而在后续建立多维分析模型(CUBE)的时候,会对数据提前进行汇总,保障产生分析结果的效率。
- 确定维度
维度是分析的各个角度.例:我们希望按照时间,或者按照地区,或者按照产品进行分析。那么这里的时间,地区,产品就是相应的维度。基于不同的维度,可以看到各个量度汇总的情况,也可以基于所有的维度进行交叉分析。
维度的层次(Hierarchy)和级别(Level)。例:在时间维度上,按照”度-季度-月”形成了一个层次,其中”年” ,”季度” ,”月”成为了这个层次的3个级别。我们可以将“产品大类-产品子类-产品”划为一个层次,其中包含“产品大类”、“产品子类”、“产品”三个级别。
- 创建事实表
在确定好事实数据和维度后,将考虑加载事实表。业务系统的的一笔笔生产,交易记录就是将要建立的事实表的原始数据.
我们的做法是将原始表与维度表进行关联,生成事实表。关联时有为空的数据时(数据源脏),需要使用外连接,连接后将各维度的代理键取出放于事实表中,事实表除了各维度代理键外,还有各度量数据,不应该存在描述性信息。
事实表中的记录条数据都比较多,要为其设置复合主键索引,以实现数据的完整性和基于数据仓库的查询性能优化。
- 首先,元数据能提供基于用户的信息,如记录数据项的业务描述信息的元数据能帮助用户使用数据。
- 其次,元数据能支持系统对数据的管理和维护,如关于数据项存储方法的元数据能支持系统以最有效的方式访问数据。
- 描述哪些数据在数据仓库中;
- 定义要进入数据仓库中的数据和从数据仓库中产生的数据;
- 记录根据业务事件发生而随之进行的数据抽取工作时间安排;
- 记录并检测系统数据一致性的要求和执行情况;
- 衡量数据质量。
- ODS为企业提供即时的,操作型的,集成的数据集合,具有面向主题性,集成性,动态性,即时性,明细性等特点
- ODS作为数据库到数据仓库的一种过渡形式,与数据仓库在物理结构上不同,能提供高性能的响应时间,ODS设计采用混合设计方式。
- ODS中的数据是"实时值",而数据仓库的数据却是"历史值",一般ODS中储存的数据不超过一个月,而数据仓库为10年或更多.
部门数据
或主题数据
(subject area)。在数据仓库的实施过程中往往可以从一个部门的数据集市着手,以后再用几个数据集市组成一个完整的数据仓库。需要注意的就是在实施不同的数据集市时,同一含义的字段定义一定要相容,这样再以后实施数据仓库时才不会造成大麻烦。8. DSS(decision-support system)决策支持系统: 用于支持管理决策的系统。通常,DSS包括以启发的方式对大量的数据单元进行的分析,通常不涉及数据更新。
9. OLTP与OLAP的区别
OLTP | OLAP | |
---|---|---|
用户 | 操作人员 | 决策人员 |
功能 | 日常操作 | 分析决策 |
DB设计 | 面向应用 | 面向主题 |
数据 | 当前的,最新的,细节的,二维的 | 历史的,概括的,多维集成的,统一的 |
存取及规模 | 读取少 | 大规模读 |
- 事实表是包含大量数据值的一种结构。事实数据表可能代表某次银行交易,包含一个顾客的来访次数,并且这些数字信息可以汇总,以提供给有关单位作为历史的数据。
- 每个数据仓库都包含一个或者多个事实数据表。事实数据表只能包含:
-
数字度量字段
和 - 使事实表与维度表中对应项的
相关索引字段
.,该索引包含作为外键的所有相关性维度表的主键。
-
- 事实数据表中的“度量值”有两种:一种是可以累计的度量值,另一种是非累计的度量值。用户可以通过累计度量值获得汇总信息。
12. 退化维 一般来说事实表中的外键都对应一个维表,维的信息主要存放在维表中。但是退化维仅仅是事实表中的一列,这个维的相关信息都在这一列中,没有维表与之相关联。比如:发票号,序列号等等。那么退化维有什么作用呢?
- 退化维具有普通维的各种操作,比如:上卷,切片,切块等
(上卷汇总,下钻明细;切片,切块:对二维数据进行切片,三维数据进行切块,,可得到所需要的数据) - 如果存在退化维,那么在ETL的过程将会变得容易。
- 它可以让group by等操作变得更快
14. 钻取: 首先从某一个汇总数据出发,查看组成该数据的各个成员数据。
15. KPI KPI(Key Performance Indication)关键业绩指标用来衡量业绩好坏比如销售这个主题,销售增长率、销售净利润就是一个KPI
16. ETL
extract
/transformation
/load
寻找数据,整合数据,并将它们装入数据仓库的过程。ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析的依据。
- 抽取
- 方法有三种:
- 利用工具,例如datastage,informatic,OWB,DTS,SISS.
- 利用存储过程.
- 前两种工具结合.
- 抽取前的调研准备工作:
- 弄清数据是从哪几个业务系统中来,各个业务系统的数据库服务器运行什么DBMS.
- 是否存在手工数据,手工数据量有多大。
- 是否存在非结构化的数据。
- 抽取中的数据处理方法:
- 业务系统服务器与DW的DBMS相同时,在DW数据仓库服务器与原业条系统之间建立直接的链接关系就可以写select语句直接访问.
- 业务系统服务器与DW的DBMS不同时,对不能建立直接链接的话,可以将源数据导入.txt文件,在导入ODS中,或通过程序接口来完成.
- 对于文件类型数据源(.txt.xls)利用数据库工程将这个数据导入指定的数据库,如(oracle的SQL*LOADER,db2的import)
- 如何实现增量抽取
业务系统会记录业务发生的时间,我们可以用来做增量的标志,每次抽取之前首先判断ODS中记录最大的时间,然后根据这个时间去业务系统取大于这个时间所有的记录。
- 方法有三种:
- 清洗与转换
- 清洗
数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。 - 清洗的数据种类:
- 不完整数据
- 错误数据
- 重复的数据.
- 转换
1.不一致数据转换:编码转换(m,f; 男女); 字段转换(balance,bal); 度量单位的转换(cm,m)
2.数据粒度的转换; 业务系统数据存储非常明细的数据,而数据仓库中数据是用分析的,不需要非常明细,会将业务系统数据按照数据仓库粒度进行聚合.
3.商务规则的计算.不同企业有不同的业务规则,不同的数据指标,在ETL过程,将这些数据计算好之后存储在数据仓库中,供分析使用(比如KPI)
- 清洗
- 加载经过前两步处理后的数据可直接加载入数据仓库
2.雪花模型通过规范维度表来减少冗余度,也就是说,维度表数据已经被分组成一个个的表而不是使用一个大表。例如产品表被分成了产品大类和产品小类两个表。尽管这样做可以节省了空间,但是却增加了维度表的数量和关联的外键的个数。这就导致了更复杂的查询并降低了数据库的效率
18. 维度建模(dimensional modeling):
维度建模
是数据仓库建设中的一种数据建模方法。按照事实表,维表来构建数据仓库,数据集市。这种方法最被人广泛知晓的名字就是星型模式(Star-schema)。19. 数据仓库项目最重要或需要注意的是什么,以及如何处理? 数据质量,主要是数据源数据质量分析,数据清洗转换,当然也可以定量分析
数据仓库有两个重要目的,一是数据集成,二是服务BI
数据准确性是数据仓库的基本要求,而效率是项目事实的前提,数据质量、运行效率和扩展性是数据仓库项目设计、实施高明与否的三大标志;
推荐阅读
- PMSJ寻平面设计师之现代(Hyundai)
- 杜月笙的口才
- Linux下面如何查看tomcat已经使用多少线程
- 皮夹克
- 解读《摩根集团》(1)
- 绘本与写作
- 蓝桥杯试题
- 麦田社群
- 面对苦难——如何化解
- 葱爷说股20190107