数据仓库面试题

什么是数据仓库?

数据仓库是⼀个⾯向主题的、集成的、相对稳定的、反应历史变化的数据集合,用于支持管理决策。简单来说,比如一个企业有很多数据源,有的业务数据存放在Mysql,有的存放在Oracle,有的日志存放在Ftp,Nginx服务器上,有的是外部采集的爬虫数据等等。那么对于企业来说沉淀了这么多数据,要把这些不同数据按照统一的格式,一定的规范存储到一起,然后再通过特定的工具做数据计算分析,给企业挖掘数据价值。0把企业各种数据源的数据放到一起存储和计算的地方就叫数据仓库。

为什么说数据仓库的数据是面向主题的?

数据仓库的数据是面向主题的,就是说企业数据仓库中数据是分主题域的,比如以电商数据为例,数据仓库建设的主题分为:会员信息主题域,订单主题域,商家主题域,商品主题域等等。这些牵涉到数据建模的选型,为啥要这样建设成主题,这是很多企业历年经验总结的,具体好处原因后面数仓建模模块时详细分析。

为什么说数据仓库的数据是集成的?

数据仓库中的数据是由很多个数据源的数据融合后加工而来的,跟原来业务系统的数据差别会很大,比如根据各种数据源汇总统计的数据,或者通过特定算法ETL加工处理后得来的数据。这些数据都放在一起,所以叫集成的。例如养老保险、医疗保险、汽车保险等多个险种的数据都保存在公司的保险业务库中,集成为一个保险主题的数据,既有明细数据也有各种汇总,统计,挖掘后的数据。

为什么说数据仓库的数据是相对稳定的?

数据仓库中保存的数据是一系列企业数据的历史快照,不建议被修改,当然实际分析会有数据回补的情况。一般情况下用户只能通过分析工具进行查询和分析。数据仓库并没有像数据库一样采用各种复杂的索引技术,所以数据仓库只进行数据查询操作,也就比数据库相对稳定。

为什么说数据仓库的数据是反映历史变化的?

数据仓库的数据是随时间的变化而不断变化的,这一特征表现在以下三个方面:
第一,数据仓库随时间变化不断增加新的数据内容。
第二,数据仓库随时间变化不断删去旧的数据内容。
第三,数据仓库中包含有大量的综合数据,这些综合数据中很多跟时间有关,如数据经常按照时间段进行综合,或隔一定的时间片进行抽样等等。这些数据要随着时间的变化不断地进行重新综合。因此,数据仓库的数据特征都包含时间项,以标明数据的历史时期。

数据仓库要不要分层?

数据仓库是数据存储计算的地方,是否需要分层是由数据规模,业务场景决定的。可以说很多公司数据仓库建设刚起步时,大部分的数据都是经过粗暴的数据接入,进行ETL后就直接对接业务,生成报表或者导入业务系统直接使用。后来随着公司业务的发展,数据的沉淀,数据仓库发展到一定阶段,发现数据的使用杂乱无章,各种业务都是从原始数据直接计算而得,造成各种重复计算,例如可能两张表只差了几个字段,但每个人都跑了一次,严重浪费了计算资源和存储资源,企业负担成本极大。这个时候大家就要想着如何规范化存储和计算了,如何最大化降低企业成本。所以当数据规模小时,不分层也可以,也没必要搞那么规范,规范的不好之处就是要付出很大的人力成本去实施规范,监督规范的实施。如果数据规模比较大,那建议分层,方便存储和计算。

数仓分层的好处有哪些?

  1. 清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。

  2. 数据血缘追踪:我们最终给业务呈现的是一张能直接使用的业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。

  3. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。

  4. 把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。

  5. 屏蔽原始数据及业务的影响:不必改一次业务就需要重新接入数据,或者业务改了数据,也不一定对现在有影响。

    什么是数仓建模?

    所谓的数据仓库建模,其实本质就是解决如何管理和组织企业中的数据,并将其用于业务用户的决策制定过程中的方法体系;从企业来说就是数据如何更好地进行商业赋能,从技术角度来说就是如何合理化管理企业数据的存储和计算。不同数据体量的数仓的管理模式是不一样,数据规模越大,场景越复杂,管理起来的细节越丰富,需要考虑的问题也就越多,数仓建设管理也就越规范。故对于企业来说,会因为如数据规模,业务场景,成本,决策战略等各种原因选择不同的数据仓库架构与建设方式。

    数据仓库建模的目的?

    数仓建模是通过建模的方法更好地组织、存储数据,以便在性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点进行考虑:

    1. 访问性能:能够快速查询所需的数据,减少数据I/O

    2. 数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数据系统中的存储成本和计算成本

    3. 使用效率:改善用户应用体验,提高使用数据的效率

    4. 数据质量:改善数据统计口径的不一致性,减少数据计算错误的可能性,提供高质量的、一致的数据访问平台。

      有哪些常见的数据仓库建模方法?

      数据仓库建模方法论可分为:维度建模、范式建模、Data Vault模型、Anchor模型。目前主流还是维度建模,会夹杂着范式建模。

      什么是维度建模?

      ​ 维度建模,是数据仓库大师Ralph Kimball提出的,且将数据仓库中的表划分为事实表、维度表两种类型。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模是面向分析的,为了提高查询性能可以增加数据冗余,反规范化的设计技术。

      什么是事实表?

      在现实世界中,每一个操作型事件,基本都是发生在实体之间的,伴随着这种操作事件的发生,会产生可度量的值,而这个过程就产生了一个事实表,存储了每一个可度量的事件。以电商场景为例,一次购买事件,涉及的主体包括客户、商品、商家,产生的可度量值包括商品数量、金额、件数、交易时间等。

      然后按照不同的粒度进行划分,可以分为事务事实表、周期快照事实表、累积快照事实表。那什么是粒度?粒度就是每一条数据的含义,在事实表设计时,一定要注意一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。如果粒度是每一行数据对应一个事务,那就是事务事实表,例如产品交易事务事实、ATM交易事务事实。如果粒度是每一行数据对应一定的时间周期间隔(每天,每月)来捕捉业务活动的执行情况,那就是周期快照事实表,用来记录有规律的、固定时间间隔的业务累计数据,例如账户月平均余额事实表。如果粒度是每一行数据对应一个业务处理过程的整个生命周期,那就是累计快照事实表,通常这类事实表比较少见。

      什么是维度表?

      维度,顾名思义,就是业务过程的发生或分析角度。比如从颜色、尺寸的角度来比较手机的外观,从cpu、内存等比较手机性能。维度表一般为单一主键,在ER模型中,实体为客观存在的事物,会带有自己的描述性属性,属性一般为文本性、描述性的,这些描述被称为维度。

      比如商品,单一主键:商品ID,属性包括产地、颜色、材质、尺寸、单价等, 但并非属性一定是文本,比如单价、尺寸,均为数值型描述性的,日常主要的维度抽象包括:时间维度表、地理区域维度表等。

      简述维度建模的步骤(如何设计事实表)?

      1.选择业务;首先明确业务需求,进⾏详细的需求分析,明确关键的业务步骤,选择与需求有关的业务过程。

      2.声明粒度;确定事实表的每⼀⾏所表示的业务含义, 粒度传递的是与事实表度量有关的细节层次。

      3.确定维度;选择能够描述清楚业务过程所处的环境的维度信息

      4.确定事实;事实可以通过回答“过程的度量是什么”来确定。应该选择与业务过程有关的所有事实, 且事 实的粒度要与所声明的事实表的粒度⼀致。

      5.冗余维度;在⼤数据的事实表模型设计中,考虑更多的是提⾼下游⽤户的使⽤效率,降低数据获取的复 杂性,减少关联的表数量。所以通常事实表中会冗余⽅便下游⽤户使⽤的常⽤维度, 以实现对事实表的过滤查询、控制聚合层次、排序数据以及定义主从关系等操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值