数据仓库简介
Posted 宝哥大数据[离职找工作中,大佬帮内推下]
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据仓库简介相关的知识,希望对你有一定的参考价值。
文章目录
一、数据仓库介绍
1.1、什么是数据仓库
数据仓库,英文名称为 Data Warehouse,可简写为 DW 或 DWH。数据仓库,
- 是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。
- 它出于分析性报告和决策支持目的而创建。
- 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
- 是商业智能 (BI) 系统的重要组成部分
1.2、数据仓库的特点
1.2.1、面向主题的
与传统数据库面向应用进行数据组织的特点相对应,数据仓库中的数据是面向主题进行组织的。
什么是主题呢?
首先,主题是一个抽象的概念,是较高层次上企业信息系统中的数据综合、归类并进行分析利用的抽象。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。面向主题的数据组织方式,就是在较高层次上对分析对象的数据的一个完整、一致的描述,能完整、统一地刻划各个分析对象所涉及的企业的各项数据,以及数据之间的联系。所谓较高层次是相对面向应用的数据组织方式而言的,是指按照主题进行数据组织的方式具有更高的数据抽象级别。
1.2.2、集成化的
数据仓库的数据是从原有的分散的数据库数据抽取来的。操作型数据与 DSS 分析型数据之间差别甚大。
第一,数据仓库的每一个主题所对应的源数据在原有的各分散数据库中有许多重复和不一致的地方,且来源于不同的联机系统的数据都和不同的应用逻辑捆绑在一起;
第二,数据仓库中的综合数据不能从原有的数据库系统直接得到。因此在数据进入数据仓库之前,必然要经过统一与综合,这一步是数据仓库建设中最关键、最复杂的一步,所要完成的工作有:
- (1)要统一源数据中所有矛盾之处,如字段的同名异义、异名同义、单位不统一、字长不一致,等等。
- (2)进行数据综合和计算。数据仓库中的数据综合工作可以在从原有数据库抽取 数据时生成,但许多是在数据仓库内部生成的,即进入数据仓库以后进行综合生成的。
1.2.3、稳定的
数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一般情况下并不进行修改操作。
数据仓库的数据反映的是一段相当长的时间内历史数据的内容,是不同时点的数据库快照的集合,以及基于这些快照进行统计、综合和重组的导出数据,而不是联机处理的数据。数据库中进行联机处理的数据经过集成输入到数据仓库中,一旦数据仓库存放的数据已经超过数据仓库的数据存储期限,这些数据将从当前的数据仓库中删去。因为数据仓库只进行数据查询操作,所以数据仓库管理系统相比数据库管理系统而言要简单得多。数据库管理系统中许多技术难点,如完整性保护、并发控制等等,在数据仓库的管理中几乎可以省去。但是由于数据仓库的查询数据量往往很大,所以就对数据查询提出了更高的要求,它要求采用各种复杂的索引技术;同时由于数据仓库面向的是商业企业的高层管理者,他们会对数据查询的界面友好性和数据表示提出更高的要求。
1.2.4、随时间不断变化的
数据仓库中的数据不可更新是针对应用来说的,也就是说,数据仓库的用户进行分析处理时是不进行数据更新操作的。但并不是说,在从数据集成输入数据仓库开始到最终被删除的整个数据生存周期中,所有的数据仓库数据都是永远不变的。
数据仓库的数据是随时间的变化而不断变化的,表现在以下 3 方面:
-
(1)数据仓库随时间变化不断增加新的数据内容。数据仓库系统必须不断捕捉 OLTP 数据库中变化的数据,追加到数据仓库中去,也就是要不断地生成 OLTP 数据库的快照,经统一集成后增加到数据仓库中去;但对于确实不再变化的数据库快照,如果捕捉到新的变化数据,则只生成一个新的数据库快照增加进去,而不会对原有的数据库快照进行修改。
-
(2)数据仓库随时间变化不断删去旧的数据内容。数据仓库的数据也有存储期限,一旦超过了这一期限,过期数据就要被删除。只是数据仓库内的数据时限要远远长于操作型环境中的数据时限。在操作型环境中一般只保存有 60 ~ 90 天的数据,而在数据仓库中则需要保存较长时限的数据(如 5 ~ 10年),以适应DSS进行趋势分析的要求。
-
(3)数据仓库中包含有大量的综合数据,这些综合数据中很多跟时间有关,如数据经常按照时间段进行综合,或隔一定的时间片进行抽样等等。这些数据要随着时间的变化不断地进行重新综合。因此,数据仓库的数据特征都包含时间项,以标明数据的历史时期。
1.3、数据仓库发展历程
数据仓库的发展大致经历了这样的三个过程:
-
简单报表阶段: 这个阶段,系统的主要目标是解决一些日常的工作中业务人员需要的报表,以及生成一些简单的能够帮助领导进行决策所需要的汇总数据。这个阶段的大部分表现形式为数据库和前端报表工具。
-
数据集市阶段: 这个阶段,主要是根据某个业务部门的需要,进行一定的数据的采集,整理,按照业务人员的需要,进行多维报表的展现,能够提供对特定业务指导的数据,并且能够提供特定的领导决策数据。
-
数据仓库阶段: 这个阶段,主要是按照一定的数据模型,对整个企业的数据进行采集,整理,并且能够按照各个业务部门的需要,提供跨部门的,完全一致的业务报表数据,能够通过数据仓库生成对对业务具有指导性的数据,同时,为领导决策提供全面的数据支持。
通过数据仓库建设的发展阶段,我们能够看出,数据仓库的建设和数据集市的建设的重要区别就在于数据模型的支持。因此,数据模型的建设,对于我们数据仓库的建设,有着决定性的意义。
1.4、数据库与数据仓库的区别
了解数据库与数据仓库的区别之前,首先掌握三个概念。数据库软件、数据库、数据仓库。
数据库软件:是一种软件,可以看得见,可以操作。用来实现数据库逻辑功能。属于物理层。
数据库:是一种逻辑概念,用来存放数据的仓库。通过数据库软件来实现。数据库由很多表组成,表是二维的,一张表里可以有很多字段。字段一字排开,对应的数据就一行一行写入表中。数据库的表,在于能够用二维表现多维关系。目前市面上流行的数据库都是二维数据库。如:Oracle、DB2、mysql、Sybase、MS SQL Server等。
数据仓库:是数据库概念的升级。从逻辑上理解,数据库和数据仓库没有区别,都是通过数据库软件实现的存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大得多。数据仓库主要用于数据挖掘和数据分析,辅助领导做决策。
在IT的架构体系中,数据库是必须存在的。必须要有地方存放数据。比如现在的网购,淘宝,京东等等。物品的存货数量,货品的价格,用户的账户余额之类的。这些数据都是存放在后台数据库中。或者最简单理解,我们现在微博,QQ等账户的用户名和密码。在后台数据库必然有一张user表,字段起码有两个,即用户名和密码,然后我们的数据就一行一行的存在表上面。当我们登录的时候,我们填写了用户名和密码,这些数据就会被传回到后台去,去跟表上面的数据匹配,匹配成功了,你就能登录了。匹配不成功就会报错说密码错误或者没有此用户名等。这个就是数据库,数据库在生产环境就是用来干活的。凡是跟业务应用挂钩的,我们都使用数据库。
数据仓库则是 BI 下的其中一种技术。由于数据库是跟业务应用挂钩的,所以一个数据库不可能装下一家公司的所有数据。数据库的表设计往往是针对某一个应用进行设计的。比如刚才那个登录的功能,这张user表上就只有这两个字段,没有别的字段了。但是这张表符合应用,没有问题。但是这张表不符合分析。比如我想知道在哪个时间段,用户登录的量最多?哪个用户一年购物最多?诸如此类的指标。那就要重新设计数据库的表结构了。对于数据分析和数据挖掘,我们引入数据仓库概念。数据仓库的表结构是依照分析需求,分析维度,分析指标进行设计的。
数据库与数据仓库的区别实际讲的是OLTP与OLAP的区别。
- 操作型处理,叫联机事务处理OLTP(On-Line Transaction Processing,),也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。
- 分析型处理,叫联机分析处理OLAP(On-Line Analytical Processing)一般针对某些主题的历史数据进行分析,支持管理决策。
二、数据仓库架构分层
5.1、ODS (Operation Data Store) 原始数据层
一般来说ODS层的数据和源系统的数据是同构的。ODS层的数据粒度是最细的。
ODS层的表通常包括两类
- 存储当前需要加载的数据
- 存储处理完后的历史数据。
- 历史数据一般保存3-6个月后需要清除,以节省空间。
- 不同的项目要区别对待,如果源系统的数据量不大,可以保留更长的时间,甚至全量保存;
5.2、DW (Data Warehouse)数据仓库层
DW 层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。这一层的数据一般是遵循数据库第三范式的,其数据粒度通常和 ODS 的粒度相同。在 DW 层会保存BI系统中所有的历史数据,例如保存10年的数据。
5.2.1、DWD (Data Warehouse Detail) 明细数据层
对 ODS 层数据进行清洗,去空值、脏数据、超过极限范围的数据、维度退化、脱敏等
5.2.2、DWB (Data Warehouse Base) / DWM (Data Warehouse Middle) 基础数据层、轻度汇总层
存储的是客观数据,一般用作中间层,可以认为是大量指标的数据层。
DWB 是 DWD层和DWS层之间的一个过渡层次,是对DWD层的生产数据进行轻度综合和汇总统计(可以把复杂的清洗,处理包含,如根据PV日志生成的会话数据)。
DWB 与 DWD 的主要区别在于二者的应用领域不同
- DWD 层数据来源于生产型系统,并为满意一些不可预见的需求而进行沉淀
- DWB 层则面向分析型应用进行细粒度的统计和沉淀
表schema:一般按天创建分区,没有时间概念的按具体业务选择分区字段。
5.2.3、DWS (Data Warehouse Service) 服务数据层
基于DWB上的基础数据,整合汇总成分析某一个主题域的服务数据,一般是宽表。
又称数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
- 从数据粒度来说,已经不存在明细数据了。
- 从时间跨度来说,用户通常只需要分析近几年(如近三年的数据)的即可
- 从分析角度来说,为了满足用户分析的需求
- 从数据广度来说,覆盖了所有业务数据。
5.3、APP/ADS层 应用层、数据产品层
这一层是提供为数据产品使用的结果数据。完全为了满足具体的分析需求而构建的数据,也是星形或雪花结构的数据。
主要是提供给数据产品和数据分析使用的数据,一般会存放在 ES、Mysql 等系统中,供线上系统使用,也可能会存在 Hive 或者 Druid 中供数据分析和数据挖掘使用。
如我们经常说的报表数据,或者说那种大宽表,一般就放在这里。
5.4、DIM 维表层
维表层主要包含两部分数据:
-
高基数维度数据:一般是用户资料表、商品资料表类似的资料表。数据量可能是千万级或者上亿级别。
-
低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。
5.5、为什么要对数据仓库分层?
清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径
复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题
5.6、例子
参考: https://blog.csdn.net/CarloPan/article/details/111414165
趁热打铁,举个栗子说明一下,如下图,可以认为是一个电商网站的数据体系设计。我们暂且只关注用户访问日志这一部分数据。
1、在ODS层中,由于各端的开发团队不同或者各种其它问题,用户的访问日志被分成了好几张表上报到了我们的ODS层。
2、为了方便大家的使用,我们在DWD层做了一张用户访问行为天表,在这里,我们将PC网页、H5、小程序和原生APP访问日志汇聚到一张表里面,统一字段名,提升数据质量,这样就有了一张可供大家方便使用的明细表了。
3、在DWM层,我们会从DWD层中选取业务关注的核心维度来做聚合操作,比如只保留人、商品、设备和页面区域维度。类似的,我们这样做了很多个DWM的中间表
4、然后在DWS层,我们将一个人在整个网站中的行为数据放到一张表中,这就是我们的宽表了,有了这张表,就可以快速满足大部分的通用型业务需求了。
5、最后,在APP应用层,根据需求从DWS层的一张或者多张表取出数据拼接成一张应用表即可。
备注:例子只是为了简单地说明每一层的作用,并不是最合理的解决方案,大家辩证地看待即可。
参考:
https://blog.csdn.net/pmdream/article/details/113601956
以上是关于数据仓库简介的主要内容,如果未能解决你的问题,请参考以下文章
ThreadLocal源码分析_01 入门案例以及表层源码分析
数据仓库各层到底在做什么?(ODS,DWD,DWM,DWS,ADS)