随着信息化的不断深入,越来越多的人开始意识到数据的重要性。数据支持决策,数据支持运营,数据变现,数据营销等等数据应用,开始越来越多的在各大中小型公司普及。
联机事物处理(On-Line Transaction Processing),存在许多不便,具体如下:
- 数据过于分散。存放在多个数据库,甚至是异构数据。
- 标准规则及编码不统一。不同业务系统间不统一,甚至单个业务系统不同时间段间也可能不统一。
- 数据质量问题。会有部分垃圾数据、测试数据、系统 bug 等产生的错误数据,都会影响到数据质量。
- 历史数据缺失。通常只会保留最近半年到一年左右数据,历史数据会被转移甚至删除。
- 对业务系统性能的影响。过量的分析计算会抢占计算资源。
- 面向 OLTP 的数据存储,有时候并不适合数据分析。
为了更好的支持各种数据应用,上世纪 90 年代初,联机分析处理(On-Line Analysis Processing)及数据仓库(Data Warehouse)的概念应运而生。
联机分析处理
联机分析处理的概念最早由关系数据库之父 E.F.Codd 于 1993 年提出。Codd 提出了多维数据库和多维分析的概念,把业务系统面向业务逻辑、面向事务增删改查而设计的存储结构,转换成面向分析、侧重查询的多维分析型存储结构。将所有对象都抽象为维度、度量、属性三类:
- 维度,可以理解为不同分析视角。
- 属性,用来定义和描述维度。
- 度量,是在一个或多个维度限定下的取值。
多维数据库
存储格式分为两种:
关系 OLAP(ROLAP):基于关系数据库的 OLAP 实现,细节数据以及为聚合后的的粗粒度数据,通常会存储到关系型数据库中。
多维 OLAP(MOLAP):有时候会构件 Cube,优点是使用方便,缺点是需要占用大量的存储空间。
多维分析的基本操作:
- 钻取:上卷或下钻。通过调整维度的个数,来变换分析的粒度。
- 切片与切块:选取整体的部分维度去看度量,选两个就是切片,三个或以上是切块
- 旋转:例如行列转换
数据仓库理论
数据仓库里的 DM 层,事实上就是按照多维数据库的方式构建而成的。但数据仓库要比 OLAP 所涵盖的内容更广。
数据仓库之父比尔·恩门(Bill Inmon)于 1990 年提出并被广泛接受——数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support)。
之后 Kimball 又提出了自己对于数据仓库的不同见解,从而引发了 Inmon 和 Kimball 这两种数据仓库构建方法间的长期争论。
事实上,数据仓库的构建是一个复杂的过程,是数据采集、存储、管理、计算、应用相关的一系列逻辑概念及方法论。
Inmon 提出数据仓库的构建过程,应该是自顶而下的(注意:这里的顶不是架构图的上层,而是数据流的上游,也就是数据源)。从数据源到数据仓库再到数据集市,采用范式建模的方法构建数据仓库,遵从第三范式(1.每一个属性都是不可分割的原子项,而不是集合数组记录等,2.每个属性都有且仅依赖于主键,3.每个属性都不能传递依赖于主属性,如果有就拆分成两张表)。构建过程类似于瀑布模型,这就对构建者在业务理解、数据源真实现状、数据建模方法论等有非常高的要求,且构建周期较长。
Kimball 提出数据仓库的构建过程,采用维度建模的方法,根据业务需求优先构建数据集市,数据再从各个不同的数据集市汇集到数据仓库。这样对数据仓库构建者的各方面要求就没有那么高,而且能够快速对外提供数据应用。但随着需求变更、随着数据集市的越来越多,会使得数据仓库的管理变得极其困难:
- 数据存储模型没有事先的统一规划会变的越来越乱。
- 相同或相似的数据内容在不同数据集市内会重复计算造成资源浪费的同时也可能造成数据不一致。
- 从 ODS 直接到 DM,ETL 的处理逻辑会比较复杂,如果数据源或者需求变更,改动起来会很难且容易出错。
数据仓库实践
实际项目中,究竟应该采用那种建模方法呢?各有优劣,只能具体问题具体分析了。
总的来说需要综合考虑以下几点:
- 团队内成员对数据仓库理论(分层架构,维度建模,ETL 设计)的掌握程度
- 业务知识的熟悉程度(广度和深度)
- 任务需求的紧迫程度
- 需求的性质(短期任务还是长期任务,探索型还是永久落地型)
Inmon,ODS>DW>DM,耗时长,对业务知识及数仓理论要求高,好处是规范统一,易于维护。
kimball,ODS>DM>DW,好处是可以快速输出成果,探索型或者短期任务完全可以使用这种方式。但缺点是数据集市直接从 ODS 取数,每一次处理都要数据清洗、编码映射、缺失数据处理等等一些列细节操作,维护困难。
因此,在实际的数据仓库项目中,通常会是两种建设方法混合使用,两者共存才是更好的实践方案。
数据仓库组成
数据存储与管理(warehouse)
数据采集与计算(extract transform load)
数据应用(business intelligence)
————————— 结束语 ————————-
**
本篇分享,算是数仓系列的第一篇,不做太多介绍,给大家做个初步的认识。
更多精彩且听后续分解