有人说数据库与数据仓库它们的名字不同,肯定不同。哈哈哈哈,这话也对,那么在讲两者之间的区别之前,我们先来了解一下什么是数据仓库。
一、数据仓库诞生的原因
- 历史数据积存:历史数据使用频率过低,堆积在业务数据库中,会导致查询性能下降
- 企业数据分析需要:各个部门自己建立独立的数据抽取系统,导致数据不一致,资源浪费严重,数据库权限也会存在风险
二、数据仓库的基本概念
数据仓库,英文名称为DataWarehouse,可简写为DW或DWH。数据仓库顾名思义,是一个很大的数据存储集合,出于企业的分析性报告和决策支持目的而创建,对多样的业务数据进行筛选与整合。它为企业提供一定的BI(商业智能)能力,指导业务流程改进、监视时间、成本、质量以及控制。
数据仓库将各个异构的数据源数据库的数据给统一管理起来,并且完成了质量较差的数据的剔除、格式转换,最终按照一种合理的建模方式来完成源数据组织形式的转变,以更好的支持到前端的可视化分析。数据仓库的输入方式是各种各样的数据源,最终的输出用于企业的数据分析、数据挖掘、数据报表等方向。
三、数据仓库的主要特征
数据仓库是面向主题的(Subject-Oriented)、集成的(Integrated)、稳定的(Non-Volatile)和时变的(Time-Variant)数据集合,面向数据分析,用以支持管理决策。
1.主题性
不同于传统数据库对应于某一个或多个项目,数据仓库根据使用者实际需求,将不同数据源的数据在一个较高的抽象层次上做整合,所有数据都围绕某一主题来组织。
2.集成性
数据仓库中存储的数据是来源于多个数据源的集成,原始数据来自不同的数据源,存储方式各不相同。要整合成为最终的数据集合,需要从数据源经过一系列抽取、清洗、转换的过程。
3.稳定性
数据仓库中保存的数据是一系列历史快照,不允许被修改。用户只能通过分析工具进行查询和分析。这里说明一点,数据仓库基本上是不许允许用户进行修改,删除操作的。大多数的场景是用来查询分析数据。
4.时变性
数据仓库会定期接收新的集成数据,反应出最新的数据变化。这和稳定特点并不矛盾。
另外说明,上面我们已经说了数据仓库中的历史数据是不能修改的,那我们每天修改或新增的数据,从业务数据库中导入数据仓库中,可以以时间戳标记版本来标记最新数据,老旧的数据就可以定期删除,保证数据分析的准确性。
四、数据仓库分层架构
按照数据流入流出的过程,数据仓库架构可分为三层——源数据、数据仓库、数据应用。
数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。
- 源数据层(ODS):操作性数据(OperationalDataStore),是作为数据库到数据仓库的一种过渡,ODS的数据结构一般与数据来源保持一致,可以增加字段用来进行数据管理,存储的历史数据只是只读的,提供业务系统查询使用,而且ODS的数据周期一般比较短。ODS的数据为后一步的数据处理做准备。
- 数据仓库层(DW):数据仓库(DataWarehouse),是数据的归宿,这里保持着所有的从ODS到来的数据,并长期保存,而且这些数据不会被修改,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。
- 数据应用层(DA):数据应用(DataApplication),为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据,该数据面向应用。如根据报表、专题分析需求而计算生成的数据。
五、数据仓库之ETL
建立OLAP应用之前,我们要想办法把各个独立系统的数据抽取出来,经过一定的转换和过滤,存放到一个集中的地方,成为数据仓库。这个抽取,转换,加载的过程叫ETL(Extract,Transform,Load),目的是将企业中分散、零乱、标准不统一的数据整合到一起。
ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。
1、抽取
抽取的数据源分为结构化数据、非结构化数据,半结构化数据。结构化一般采用JDBC、数据库日志方式,非结构或半结构化数据会引发文件变动。
抽取方式:全量抽取:适用于数据量小且不容易判断其数据发生改变的诸如关系表,维度表,配置表等,一般用于初始化数据。增量抽取:适用于数据量大,为了节省抽取时间而采用的抽取策略,一般用于数据更新
2、清洗
空值处理:将空值替换为特定值或直接过滤掉
验证数据正确性:把不符合业务含义的数据做统一处理
规范数据格式:比如把所有日期都规范成YYYY-MM-DD的格式
数据转码:把一个源数据中用编码表示的字段通过关联编码表转换成代表其真实意义的值
数据标准统一:比如在源数据中表示男女的方式有很多种,在抽取的时候直接根据模型中定义的值做转化。
注:主要是针对非结构化或半结构化数据
3、转换和加载
转换:用ODS中的增量或者全量数据来刷新DW中的表
加载:每insert数据到一张表都可以称为数据加载,就是将处理完的数据导入到对应的目标源里
六、ETL工具
结构化数据ETL工具:
Sqoop、Kettle、Datastage、Informatica、Kafka
非|半结构化数据ETL工具:
Flume、Logstash
上面我已经介绍了数据仓库的面貌,现在让我们看一下它们之间的区别
数据库与数据仓库的区别
数据库:数据库是面向交易的处理系统(业务系统),它是针对具体业务在数据库联机的日常操作,通常对记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理,也被称为联机事务处理OLTP(On-LineTransactionProcessing)。
数据仓库::数据仓库一般针对某些主题的历史数据进行分析,支持管理决策,又被称为联机分析处理OLAP(On-LineAnalyticalProcessing)。
首先要明白,数据仓库的出现,并不是要取代数据库。
数据仓库VS数据库
- 数据库是面向事务的设计,数据仓库是面向主题设计的。
- 数据库一般存储业务数据,数据仓库存储的一般是历史数据。
- 数据库设计是尽量避免冗余,一般针对某一业务应用进行设计,比如一张简单的User表,记录用户名、密码等简单数据即可,符合业务应用,但是不符合分析。数据仓库在设计是有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
- 数据库是为捕获数据而设计,数据仓库是为分析数据而设计。
eg:以银行业务为例,数据库是事务系统的数据平台,客户在银行做的每笔交易都会写入数据库,被记录下来,这里,可以简单地理解为用数据库记账。而数据仓库是分析系统的数据平台,它从事务系统获取数据,并做汇总、加工,为决策者提供决策的依据。比如,某银行某分行一个月发生多少交易,该分行当前存款余额是多少。如果存款又多,消费交易又多,那么该地区就有必要设立ATM了。
显然,银行的交易量是巨大的,通常以百万甚至千万次来计算。事务系统是实时的,这就要求时效性,客户存一笔钱需要几十秒是无法忍受的,这就要求数据库只能存储很短一段时间的数据。而分析系统是事后的,它要提供关注时间段内所有的有效数据。这些数据是海量的,汇总计算起来也要慢一些,但是,只要能够提供有效的分析数据就达到目的了。数据仓库,是在数据库已经大量存在的情况下,为了进一步挖掘数据资源、为了决策需要而产生的,它决不是所谓的“大型数据库”。
关于麦聪软件
麦聪软件是一家大数据分析和解决方案软件研发企业,致力于帮助中国大企业客户构建数据平台,数据驱动业务分析,实现数据资产化和数据服务化,公司现有开放型数据中台产品和企业云盘产品.