答案来源:大数据面试题V3.0,523道题,679页,46w字
问过的一些公司:字节 x 2,字节(2021.07)-(2021.08)-(2021.10),阿里 x 2,爱奇艺,百度 x 2,百度(2021.08),网易 x 3,网易(2021.09)x2,美团 x 4,美团(2021.09)x2,京东,京东(2021.09),贝壳,keep,马蜂窝 x 2,转转,滴滴,小米,米哈游,有赞 x 2,猿辅导,58 x 2,作业帮社招,字节社招,腾讯社招 x 2,端点数据(2021.07),百度(2021.09),蔚来(2021.09),恒生(2021.09),快手(2021.09),唯品会(2021.10)
参考答案:
首先,我要知道数据仓库分层架构的目标是什么?是为了实现维度建模,进而支撑决策分析目标。
数据分层从关系型在线交易系统到面向主题的数据仓库系统,从范式建模到维度建模的必经之路。
数据分层是一套让我们的数据体系更有序的行之有效的数据组织和管理方法。数据分层不是银弹,也没有绝对标准,当然也不能包治百病,不能解决所有的数据问题,但是,数据分层却可以给我们带来如下的好处:
隔离原始数据:不论是数据的异常还是数据敏感度,使真实数据与统计数据解耦开。
数据结构化更清晰:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解。
数据血缘追踪:提供给外界使用的是一张业务表,但是这张业务表可能来源很多张表。如果有一张来源表出问题了,我们可以快速准确的定位到问题,并清楚每张表的作用范围。
增强数据复用能力:减少重复开发,通过数据分层规范化,开发一些通用的中间层数据,能够减少重复计算,提高单张业务表的使用率,提升系统的执行效率。
简化复杂的问题:把一个复杂的业务分成多个步骤实现,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
减少业务的影响:业务可能会经常变化,这样做就不必改一次业务就需要重新接入数据。
减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径。
分层的核心思想就是解耦,再解耦,把复杂的问题简单化。
数据仓库基础分层主要是分为四层,如下图所示
如上图所示,一个公司可能有多个业务系统,而数据仓库就是将所有的业务系统按照某种组织架构整合起来,形成一个仓储平台,也就是数仓。
1、四层分层
第一层:
ODS——原始数据层:存放原始数据
ODS层即操作数据存储,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入本层;一般来说ODS层的数据和源系统的数据是同构的,主要目的是简化后续数据加工处理的工作。从数据粒度上来说ODS层的数据粒度是最细的。ODS层的表通常包括两类,一个用于存储当前需要加载的数据,一个用于存储处理完后的历史数据。历史数据一般保存3-6个月后需要清除,以节省空间。但不同的项目要区别对待,如果源系统的数据量不大,可以保留更长的时间,甚至全量保存;数据在装入本层前需要做以下工作:去噪、去重、提脏、业务提取、单位统一、砍字段、业务判别。
第二层:
DWD——数据明细层:对ODS层数据进行清洗、维度退化、脱敏等。覆盖所有系统的、完整的、干净的、具有一致性的数据层。
该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证,在ODS的基础上对数据进行加工处理,提供更干净的数据。同时,为了提高数据明细层的易用性,该层会采用一些维度退化手法,当一个维度没有数据仓库需要的任何数据时,就可以退化维度,将维度退化至事实表中,减少事实表和维表的关联。例如:订单id,这种量级很大的维度,没必要用一张维度表来进行存储,而我们一般在进行数据分析时订单id又非常重要,所以我们将订单id冗余在事实表中,这种维度就是退化维度。
第三层:
DWS——数据服务层: 对DWD层数据进行一个轻度的汇总。
DWS层为公共汇总层,会进行轻度汇总,粒度比明细数据稍粗,会针对度量值进行汇总,目的是避免重复计算。该层数据表会相对比较少,大多都是宽表(一张表会涵盖比较多的业务内容,表中的字段较多)。按照主题划分,如订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
第四层:
DM——数据集市层:为各种统计报表提供数据。
存放的是轻度聚合的数据,也可以称为数据应用层,基于DWD、DWS上的基础数据,整合汇总成分析某一个主题域的报表数据。主要是提供给数据产品和数据分析使用的数据,通常根据业务需求,划分成流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。从数据粒度来说,这层的数据是汇总级的数据,也包括部分明细数据。从数据的时间跨度来说,通常是DW层的一部分,主要的目的是为了满足用户分析的需求,而从分析的角度来说,用户通常只需要分析近几年的即可。从数据的广度来说,仍然覆盖了所有业务数据。
2、三层分层
上述四层数仓,如果是问的三层数仓,就相当于是把DWD、DWS合并成DW层,往细的方面分,DW还包括DWM层(数据中间层),三层分层如下:
第一层:
ODS——原始数据层:存放原始数据
第二层:
DW——数据仓库层:数据清洗,初步汇总
本层将从 ODS 层中获得的数据按照主题建立各种数据模型,每一个主题对应一个宏观的分析领域,数据仓库层排除对决策无用的数据,提供特定主题的简明视图。在DW层会保存BI系统中所有的历史数据,例如保存10年的数据。
第三层:
DM——数据集市层
3、五层分层
五层分层如下:
第一层:
ODS——原始数据层:存放原始数据
第二层:
DWD——数据明细层:对ODS层数据进行清洗、维度退化、脱敏等。
第三层:
DWS——数据汇总层: 对DWD层数据进行一个轻度的汇总。
第四层:
ADS——数据应用层:为各种统计报表提供数据
该层是基于DW层的数据,整合汇总成主题域的服务数据,用于提供后续的业务查询等。
第五层:
DIM——维表层:基于维度建模理念思想,建立整个企业的一致性维度。
维表层主要包含两部分数据:
高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。