一、OLTP 与 OLAP
OLTP 联机事务处理
OLTP是传统关系型数据库的主要应用,主要用于日常事物、交易系统的处理
1、数据量存储相对来说不大
2、实时性要求高,需要支持事物
3、数据一般存储在关系型数据库 (oracle 或 mysql 、postgresql中)
OLAP 联机分析处理
OLAP是数据仓库的主要应用,支持复杂的分析查询,侧重决策支持
1、实时性要求不是很高, ETL 一般都是 T+1 的数据;
2、数据量很大;
3、主要用于分析决策;
二、什么是数仓
数据仓库(Data Warehouse)是一个面向主题的、集成的、稳定的且随时间变化的数据集合,用于支持管理人员的决策
1.基础知识
1.1事实表
事实表是指保存了大量业务数据的表,或者说保存了一些真实的行为数据的表。例如:销售商品所产生的订单数据。
1.2维度表
维度指的就是一个对象的属性或者特征,例如:时间维度,地理区域维度,年龄维度这是维度的概念。维度表里面存放的其实就是刚才所说的那些维度相关的信息。例如:商品表。
1.3数据库三范式
- 第一范式(1NF):数据库表的每一列都是不可分割的原子数据项。
- 第二范式(2NF):在满足1NF的基础上,数据库表中每一列都和主键相关,不能只和主键的某一部分相关(针对联合主键而言)。
- 第三范式(3NF):在满足地2NF的基础上,要求一个数据库表中不包含已在其它表中包含的非主键字段,针对刚才满足第二范式的表,其实还可以进行拆分,班主任可以有班级推导出来。
1.4星型模型vs雪花模型
对于雪花模型,维度表的设计更加规范,一般符合3NF;而星型模型,一般采用降维的操作,利用冗余来避免模型过于复杂,提高易用性和分析效率。
冗余:雪花模型符合业务逻辑设计,采用3NF设计,有效降级数据冗余;星型模型的维度表设计不符合3NF,反规范化,维度表之间不会直接相关,牺牲部分存储空间。
性能:雪花模型由于存在维度间的关联,采用3NF降低冗余,通常在使用过程中,需要连接更多的维度表,导致性能偏低;星型模型违反3NF,采用降维的操作将维度整合,以存储空间为代价有效降低维度表连接数,性能比雪花模型高。
实际工作中多采用星型模型,尽可能的多构建一些宽表,以提高数据的查询性能和方便查询。
2.数据仓库分层设计
2.1分层的好处
清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解
脏数据清洗:屏蔽原始数据的异常
屏蔽业务影响:不必改一次业务就需要重新接入数据
数据血缘追踪:简单来讲可以这样理解,我们最终给业务呈现的是能直接使用的一张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。把复杂问题简单化。将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
2.2逻辑分层
数仓分层,一般按ods->dw->dm整体架构。不同的企业,不同的业务场景,有衍生出不同的分层架构模式。例如经典四层架构:ods->dwd->dws-ads,bdl->fdl->gdl->adl等。
2.3分层依据
分层的依据在ods、da、dim层一般无歧义,关键在dw层的分层依据,也是数据仓库分层建设的核心。
- ODS层:原始数据层,数据源中的数据,采集过来之后,原样保存。
- DWD层:明细数据层,这一层是对ODS层的数据进行清洗,解决一些数据质量问题和数据的完整度问题。
- DWS层:这一层是对DWD的数据进行轻度聚合汇总,生成一系列的中间表,提升公共指标的复用性,减少重复加工,并且构建出来一些宽表,用于提供后续的业务查询。
- APP层:根据业务需要,由前面三层的数据统计而出的结果,可以直接提供查询展现,一般会把APP层的数据导出到MySQL中供线上系统使用,提供报表展示,数据监控及其它功能。也可以称为DM层。
DWD层对数据进行清洗的时候,一般需要遵循以下原则:
- 数据唯一性校验(通过数据采集工具采集的数据会存在重复的可能性)
- 数据完整性教研(采集的数据中可能会出现缺失字段的情况,针对缺失字段的数据建议直接丢掉,如果可以确定是哪一列缺失也可以进行补全,可以用同一列上的前一个数据来填补或者同一列上的后一个数据来填补)
- 数据合法性校验-1(针对数字列中出现了null,或者-之类的异常值,全部替换为一个特殊值,例如0或者-1,这个需要根据具体的业务场景而定)
- 数据合法性校验-2(针对部分字段需要校验数据的合法性,例如:用户的年龄,不能是负数)
-------------------------------------------------------------------------------------------------------------------------
每层划分的依据2:
ods层:存放原始数据信息,原则上不进行任何的数据清晰,和数据源保持一致。
dw层:数据公共层,是数仓建设的重点,一般是日志子表和一些宽表,主要完成数据的清洗、转换等
dm层:数据集市层,是最直接体系数据资产的层,一般是汇总数据,现在已经逐步弱化,面向挖掘、数据分析等
da层:数据应用层,高度汇总数据,主要用于报表展示。
技术选型,传统数仓一般以Oracle、greenplum、teradata 等,互联网数仓一般以Hadoop生态圈为主,离线以Hive为核心,准实时以spark为核心,实时以flink为核心构建。
分层实现
数据仓库一般分为三层,自上而下分别为数据贴源层(ODS,Operation Data Store)、数据公共层(CDM,Common Data Model)和数据应用层(ADS,Application Data Service)。
ODS层
贴源层,与业务库保持一致,不做任何处理
CDM层
数据公共层CDM(Common Data Model,又称通用数据模型层),包括DIM维度表、DWD,DW和DWS,由ODS层数据加工而成。主要完成数据加工与整合,建立一致性的维度,构建可复用的面向分析和统计的明细事实表,以及汇总公共粒度的指标
公共维度层(DIM):基于维度建模理念思想,建立企业一致性维度。降低数据计算口径和算法不统一风险。 公共维度层的表通常也被称为逻辑维度表,维度和维度逻 辑表通常一一对应。
明细粒度事实层(DWD):对数据进行规范化编码转换,清洗,统一格式,脱敏等,不做横向整合
主题宽表层(DW) 对dwd各种信息进行整合,输出主题宽表(面 向业务过 程,不同业务过程的信息不冗余建设,采用外键形式)
公共汇总粒度事实层(DWS):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标事实表,以宽表化手段物理化模型。构建命名规范、口径一致的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。
公共汇总粒度事实层的表通常也被称为汇总逻辑表,用于存放派生指标数据。
ADS层
数据应用层ADS(Application Data Service):面向业务需求定制开发,存放数据产品个性化的统计指标数据。
逻辑分层架构
分层的好处
清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
数据血缘追踪:简单来讲可以这样理解,我们最终给业务呈现的是一张能直接使用的张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
数据调研
业务调研,业务侧对齐,遵循关系型数据库建模方式,从概念模型(cdm)->逻辑模型(ldm)->物理模型(pdm)建模套路,是一个从抽象到具体的一个不断细化完善的分析,设计和开发的过程。
需求调研,现有BI报表需求,统计需求,用户画像,推荐系统等数据应用。
数据库调研,了解数据库表数据结构、数据形态,全局把握业务流程数据流向,做到真正业务流程和数据结构结合。
主题域划分
业务高度抽象,可先确定企业业务bu模块,然后可根据概念模型(cdm)进行一级主题划分,确定一致性维度和事实流程,构建总线矩阵。
图片来源 Kimball《The Data Warehouse Toolkits,- 3rd Edition》
按照kimball大师经典建模四步骤:选择业务过程->声明粒度->确定维度->确定事实 进行维度建模。
数仓规范
构建企业级数据仓库,必不可少的就是制定数仓规范。包括命名规范,流程规范,设计规范,开发规范 等。无规矩不成方圆,建设数仓也是这样。
三、典型的数据仓库系统架构
下图是一个典型的企业数据仓库系统,通常包含数据源,数据存储与管理,数据的访问三个部分。在实际工作中,数据仓库分为离线数据仓库和实时数据仓库