无论你是否专门从事大数据开发,作为一个开发人员,应该都听说过数据仓库的概念,那你知道为什么会出现数据仓库?数据仓库究竟是干嘛的吗?有什么价值和意义呢?那么本文就带到入门,揭开数据仓库的面纱。
数据仓库为何而来,主要解决什么问题的?
先下结论:为了分析数据而来,分析结果为企业决策提供支撑。举个简单的例子,比如你们公司要要判断明年是否要进入生产口罩,那么就需要数据支撑,比如口罩市场的需求、饱和率、利润等等,然后借由分析结果,去做判断决策,而不是拍脑袋,不然大概率就是亏本的。
下面再以一个中国人寿保险公司发展为例,详细阐述数据仓库为何而来?
(1)OLTP系统处理业务数据
中国人寿保险(集团)公司下辖多条业务线,包括:人寿险、财险、车险,养老险等。各业务线的业务正常运营需要记录维护包括客户、保单、收付费、核保、理赔等信息。这么多业务数据存储在哪里呢?
这些通用的业务行为一般是发在联机事务处理系统(OLTP), 其主要任务是执行联机事务处理,前台接收的用户数据可以立即传送到后台进行处理,并在很短的时间内给出处理结果。
通常来说,这些业务数据最终都是落在关系型数据库中的,关系型数据库(RDBMS)是OLTP典型应用,比如:Oracle、MySQL、SQL Server等
这只是最基础的业务,但是随着业务规模的不断发展,衍生出了更多的数据分析型需求,用OLTP可行吗?
(2)分析型决策需求衍生
随着集团业务的持续运营,业务数据将会越来越多。由此也产生出许多运营相关的需求问题:
......
为了能够正确认识这些问题,制定相关的解决措施,瞎拍桌子是肯定不行的。最稳妥办法就是:基于业务数据开展数据分析,基于分析的结果给决策提供支撑。也就是所谓的数据驱动决策的制定。
OLTP环境开展分析可行吗?
可以,但是没必要。OLTP系统的核心是面向业务,支持业务,支持事务。所有的业务操作可以分为读、写两种操作,一般来说读的压力明显大于写的压力。如果在OLTP环境直接开展各种分析,有以下问题需要考虑:
(3)数据仓库面世
当分析所涉及数据规模较小的时候,在业务低峰期时可以在OLTP系统上开展直接分析。但为了更好的进行各种规模的数据分析,同时也不影响OLTP系统运行,此时需要构建一个集成统一的数据分析平台。该平台的目的很简单:面向分析,支持分析,并且和OLTP系统解耦合。基于这种需求,数据仓库的雏形开始在企业中出现了。
数据仓库是一个用于存储、分析、报告的数据系统,目的是构建面向分析的集成化数据环境。我们把这种面向分析、支持分析的系统称之为OLAP(联机分析处理)系统。当然,数据仓库是OLAP系统的一种实现。
数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统,主要目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持(Decision Support)。
那么数据仓库都有什么特点呢?
面向主题性(Subject-Oriented)
集成性
主题相关的数据通常会分布在多个操作型系统中,彼此分散、独立、异构。
下图说明了保险公司综合数据的简单处理过程,其中数据仓库中与“承保”主题有关的数据来自于多个不同的操作型系统。
非易失性、非异变性
时变性
通常情况下,为了把一个复杂的工作拆成了多个简单的工作,一般将数据仓库架构分为三层,即数据操作层、数据仓库层和应用数据层(数据集市层)。
ODS(Operation Data Store 数据准备区)
数据仓库源头系统的数据表通常会原封不动的存储一份,这称为ODS层,也称为准备区。它们是后续数据仓库层加工数据的来源。ODS层数据的主要来源是业务数据库、埋点日志、其他数据源。
DW(Data Warehouse 数据仓库层)
该层包含DWD、DWS、DIM层,由ODS层数据加工而成,主要是完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标。
ADS(Application Data Store 应用数据层)
该层是基于DW层的数据,整合汇总成主题域的服务数据,用于提供后续的业务查询等。
数仓作为面向分析的数据平台,其主职工作就是对存储在其中的数据开展分析,那么如何读取数据分析呢?
理论上来说,任何一款编程语言只要具备读写数据、处理数据的能力,都可以用于数仓的开发。比如大家耳熟能详的C、java、Python等。但是这些编程一员的学习成本和开发效率都不是十分友好,在数据分析领域中,SQL语言功能很强,十分简洁,用户也容易学习和使用,是主流的语言。比如比较常用的数据仓库工具Hive就是支持SQL的语法。
本文通过例子讲清楚了数据仓库的来源,以及在企业应用中的必要性,主要是为了构建一个面向分析的集成化数据环境,分析结果可以为企业提供决策支持,真正实现数据驱动决策的目的。实际上数据仓库的建设远比上面提到的复杂,需要花费很大的成本,因此需要考虑清楚。
本文来自博客园,作者JAVA旭阳