前言
最近在学习数据仓库方便的知识,在查阅了一些资料后在这里总结一下,用作个人学习使用。参考链接如下:
数据仓库:
https://blog.csdn.net/zzq900503/article/details/78405958
数据仓库设计
https://blog.csdn.net/huzechen/article/details/103078063
数据仓库是什么
数据仓库是面向分析的存储系统
数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的数据集合。
这些数据集合出于分析性报告和决策支持目的而创建,用于支持研究管理决策。
一是为调查研究作数据支撑,
二是为实现需要业务智能的企业,提供指导业务流程改进、监视时间、成本、量以及控制。
数据仓库是一个过程而不是一个项目;数据仓库是一个环境,而不是一件产品。
数据仓库的设计
数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合
1、面向主题
操作型数据库的数据组织面向事务处理任务,各个业务系统之间各自分离,而数据仓库中的数据是按照一定的主题域进行组织的。
2、集成的
数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的,必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企业的一致的全局信息。
3、相对稳定的
数据仓库的数据主要供企业决策分析之用,所涉及的数据操作主要是数据查询,一旦某个数据进入数据仓库以后,一般情况下将被长期保留,也就是数据仓库中一般有大量的查询操作,但修改和删除操作很少,通常只需要定期的加载、刷新。
4、反映历史变化
数据仓库中的数据通常包含历史信息,系统记录了企业从过去某一时点(如开始应用数据仓库的时点)到目前的各个阶段的信息,通过这些信息,可以对企业的发展历程和未来趋势做出定量分析和预测。
5、效率足够高
数据仓库的分析数据一般分为日、周、月、季、年等,可以看出,日为周期的数据要求的效率最高,要求24小时甚至12小时内,客户能看到昨天的数据分析。由于有的企业每日的数据量很大,设计不好的数据仓库经常会出问题,延迟1-3日才能给出数据,显然不行的。
案例
这个案例很好的讲述的数据仓库,值得推荐,参考链接如上:
举个最常见的例子,拿电商行业来说好了。基本每家电商公司都会经历,从只需要业务数据库到要数据仓库的阶段。
电商早期启动非常容易,入行门槛低。找个外包团队,做了一个可以下单的网页前端 + 几台服务器 + 一个MySQL,就能开门迎客了。这好比手工作坊时期。
第二阶段,流量来了,客户和订单都多起来了,普通查询已经有压力了,这个时候就需要升级架构变成多台服务器和多个业务数据库(量大+分库分表),这个阶段的业务数字和指标还可以勉强从业务数据库里查询。初步进入工业化。
第三个阶段,一般需要 3-5 年左右的时间,随着业务指数级的增长,数据量的会陡增,公司角色也开始多了起来,开始有了 CEO、CMO、CIO,大家需要面临的问题越来越复杂,越来越深入。
高管们关心的问题,从最初非常粗放的:“昨天的收入是多少”、“上个月的 PV、UV 是多少”,逐渐演化到非常精细化和具体的用户的集群分析,特定用户在某种使用场景中,例如“20~30岁女性用户在过去五年的第一季度化妆品类商品的购买行为与公司进行的促销活动方案之间的关系”。这类非常具体,且能够对公司决策起到关键性作用的问题,基本很难从业务数据库从调取出来。
原因在于:业务数据库中的数据结构是为了完成交易而设计的,不是为了而查询和分析的便利设计的。
业务数据库大多是读写优化的,即又要读(查看商品信息),也要写(产生订单,完成支付)。
因此对于大量数据的读(查询指标,一般是复杂的只读类型查询)是支持不足的。而怎么解决这个问题,此时我们就需要建立一个数据仓库了,公司也算开始进入信息化阶段了。
数据仓库的作用在于:数据结构为了分析和查询的便利;只读优化的数据库,即不需要它写入速度多么快,只要做大量数据的复杂查询的速度足够快就行了。
那么在这里前一种业务数据库(读写都优化)的是业务性数据库,后一种是分析性数据库,即数据仓库。
最后总结一下:
数据库 比较流行的有:MySQL, Oracle, SqlServer等
数据仓库 比较流行的有:AWS Redshift, Greenplum, Hive等。
这样把数据从业务性的数据库中提取、加工、导入分析性的数据库就是传统的 ETL 工作。
数据仓库的方案建设的目的,是为前端查询和分析作为基础,由于有较大的冗余,所以需要的存储也较大。其实从这里也能看的出来,走向大数据时代是一个必然的历史过程。
为了更好地为前端应用服务,数据仓库必须有如下几点优点,否则是失败的数据仓库方案。
1.效率足够高。
2.数据质量。
3.扩展性
数据库与数据仓库的区别
数据库
1、面向事物设计
2、存储在线交易的实时数据
3、尽量避免冗余
4、捕获数据
数据仓库
1、面向主题设计
2、存储历史数据
3、有意引入冗余
4、分析数据
数据仓库分层设计
1.ODS层
ODS层中的数据全部来自于业务数据库,ODS层的表格也业务数据库中的表格一一对应,就是将业务数据库中的表格在数据仓库的底层重新建立一次,数据与结构完全一致。 由于业务数据库(OLTP)基本按照ER实体模型建模,因此ODS层中的建模方式也是ER实体模型。(抽取源数据)
2.DW层
DWD层要做的就是将数据清理、整合、规范化、脏数据、垃圾数据、规范不一致的、状态定义不一致的、命名不规范的数据都会被处理。
DWD层应该是覆盖所有系统的、完整的、干净的、具有一致性的数据层。在DWD层会根据维度模型,设计事实表和维度表,也就是说DWD层是一个非常规范的、高质量的、可信的数据明细层。(例如:黑龙江市>>黑龙江,身份证号,去除空格,去除字母开头值)
DWS层为公共汇总层,会进行轻度汇总,粒度比明细数据稍粗,基于DWD层上的基础数据,整合汇总成分析某一个主题域的服务数据,一般是宽表。DWS层应覆盖80%的应用场景。(把需要的数据整合到一起)
3.DM层
DM层为数据集市层,面向特定主题。在DM层完成报表或者指标的统计,DM层已经不包含明细数据,是粗粒度的汇总数据。DM层是针对某一个业务领域建立模型,具体用户(一般为决策层)查看DM层生成的报表。(生成真正所需要的数据)
总结
一个好的数据仓库,对于后期的维护,数据分析等都会代来很大的方便。