数据仓库概述

Posted 顧棟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据仓库概述相关的知识,希望对你有一定的参考价值。

数据仓库概述

一、什么是数据仓库

Bill Inmon:数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。

Ralph Kimball:数据仓库是一个将源系统数据抽取、清洗、规格化、提交到维度数据存储的系统,为决策的制定提供查询和分析功能的支持与实现。

数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持。

二、数据仓库的基本概念

在这里插入图片描述

数据源

从外部为数据仓库系统提供进行分析的数据,这些数据来源称为数据仓库的数据源。数据源并不局限于传统数据库,也可以是非结构化的信息数据。

ETL

ETL 是将业务系统中的数据经过抽取(Extract)、**清洗转换(Transform)加载(Load)**到数据仓库的过程,目的是将企业中的分散、凌乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。

ETL 处理分为五大模块,分别是:

  • 数据抽取
  • 数据清洗
  • 数据转换
  • 规则检查
  • 数据装载。

各模块之间灵活组合,形成 ETL 处理流程。下面简单介绍一下各模块之间的功能。

数据抽取

数据仓库既然是面向主题的,那么在数据源中,只有那些与主题相关的内容才是必需的、有使用价值的。因此,必须以主题的需求为依据,对数据源的内容进行有目的地选择,这一过程被称为“数据抽取”(Data Extraction)。对于数据的抽取,是从各个不同的数据源抽取到 ODS(Operational Data Store,操作型数据存储)中。

1)对于与存放 DW 的数据库系统相同的数据源处理方法

一般情况下,DBMS(mysql、SQLServer)都会提供数据库连接功能,在 DW 数据库服务器和原业务系统之间建立直接的连接关系,接下来就可以写查询语句直接访问。

2)对于与存放 DW 的数据库系统不同的数据源处理方法

一种是通过工具将数据源导出成 .txt 或者 .xls 文件,然后再将这些源系统文件导入到 ODS 中。另一种方法是通过程序接口来完成。

3)对于文件类型数据源(.txt/.xls)

业务人员可以利用数据库工具将这些数据导入到指定的数据库,然后从指定的数据库中抽取。或者业务人员借助工具实现。

4)增量更新问题

一般情况,业务系统会记录业务发生的时间,可以用作增量的标志,每次抽取之前首先判断 ODS 中记录最大的时间,然后根据这个时间去业务系统取大于这个时间的所有记录。

数据清洗

一般情况下,数据仓库分为 ODS、DW 两部分。通过的做法是从业务系统到 ODS 做清洗,将脏数据和不完整数据过滤掉,再从 ODS 到 DW 的过程中转换,进行一些业务规则的计算和聚合。

为了控制这些 “脏数据” 对数据仓库分析结果的影响程度,必须采取各种有效的措施,对其进行处理,这一处理过程称为 “数据清洗”(Data Transform)。

对于缺省值:产生的原因可能是,信息暂时无法获取、信息被遗漏、属性值不存在,比如一个儿童的固定收入等。解决方法是,通过简单的统计分析,得到含有缺失值的属性个数,以及每个属性的未缺失数、缺失数和缺失率。删除含有缺失值的记录、对可能值进行插补和不处理三种情况。

对于异常值:产生的原因可能是:业务系统检查不充分。解决方法是,先对变量做一个描述性统计,进而查看哪些数据是不合理的。最常用的统计量是最大值和最小值,然后判断变量是否超过了合理的范围。如果数据是符合正态分布,在原则下,异常值被定义为一组测定值中与平均值的偏差超过 3 倍标准的值,如果不符合正态分布,也可以用原理平均值的多少倍标准差来描述。

对于不一致值:产生的原因可能是:被挖掘的数据是来自不同的数据源、对于重复性存放的数据未能进行一致性更新造成。例如:两张表中都存储了用户电话号码,但在用户的号码发生改变时只更新了一张表中的数据,那么两张表中就有了不一致的数据。解决办法是,注意数据抽取的规则,对于业务数据变动的控制应该保证数据仓库中数据抽取是最新数据。

数据转换

数据转换的任务主要是进行不一致的数据转换、数据粒度的转换和一些业务规则的计算等。

  • 不一致的数据转换:这个过程是一个整合的过程,将不同业务系统的相同类型的数据统一,比如同一个用户在用户管理系统的编码是 XX0001 ,而在订单系统的编码是 YY0001 ,这样在抽取过来之后统一转换成一个编码;

  • 数据粒度的转换:业务系统一般存储粒度较小的数据,而数据仓库中的数据是用来分析的,不需要粒度很小的数据,一般情况下,会将业务系统数据按照数据仓库粒度进行聚合;

  • 业务规则的计算:不同的企业有不同的业务规则,不同的数据指标,这些指标有时候不能简单的加加减减就能完成,这个时候需要在 ETL 中将这些数据指标计算好了之后存储在数据仓库中,供分析使用。

元数据

它是关于数据仓库中数据、操作数据以及应用程序的结构和意义的描述信息。它的作用类似于数据库管理系统的数据字典,保存了逻辑数据结构、文件、地址和索引等信息。

广义上讲,在数据仓库中,元数据描述了数据仓库内数据的结构和建立方法的数据。

元数据是整个数据仓库的核心部件,元数据管理器是企业级数据仓库中的关键部件,贯穿数据仓库构建的整个过程,直接影响着数据仓库的构建、使用和维护。

将数据仓库功能区域包括数据获取、数据存储和信息传递三个部分,按照这三个功能区域可以相应地将元数据分为数据获取区域元数据数据存储区域元数据信息传递区域元数据
在这里插入图片描述

数据集市

数据集市(Data Market,DM)是为企业特定部门的决策支持而组织起来的一批数据和业务规划。它是一种小型的、部门级数据仓库,习惯上称之为 “主题域” ,企业的不同部门有不同的 “主题域” ,因而就有不同的数据集市。数据集市有两种类型:独立型数据集市(Independent Data Mart)和从属型数据集市(Dependent Data Mart)。

独立型数据集市的实质,是为了满足企业内各部门的分析需求而建立的微型数据仓库。

在这里插入图片描述
从属型数据集市的内容并不直接来自外部数据源,而是从数据仓库中得到。在数据仓库内部,数据根据分析主题,划分成若干个子集,进行组织、存放。
在这里插入图片描述
这种面向某个具体的主题而在逻辑上或物理上进行划分所形成的数据子集,就是从属型数据集市。数据划分成集市之后,在进行某个确定主题的分析时,可以有效缩小数据的检索范围,明显提高工作效率。

三、数据仓库的基本特征

  1. 面向主题

传统的操作型系统是围绕组织的功能性应用进行组织的,而数据仓库是面向主题的。

主题是一个抽象概念,简单地说就是与业务相关的数据的类别,每一个主题基本对应一个宏观的分析领域。数据仓库被设计成辅助人们分析数据。

  1. 集成

数据仓库的一个重要的功能,是把不同的数据源的数据汇总到一起。

而集成是指把不同类型的数据源的数据进行整合,按照统一的形式进行集成。比如性别在一个数据源用男/女,另一个数据源用1/2,那么在数据仓库中,就需要对其进行统一。

  1. 非易失

传统的操作型环境中的数据一般是要周期性地更新的,且一般按一次一条记录的方式进行。但数据仓库中的数据通常以批量方式载入与访问),但在数据仓库环境中并不进行数据更新。

数据仓库中的数据在进行装载时是以静态快照的格式进行的。当产生后继变化时,一个新的快照记录就会写入数据仓库。这样,在数据仓库中就保存了数据的历史状况。

  1. 时变性

时变性指的是数据仓库中的每个数据单元只在某一时间是准确的,在一些情况下,记录中加有时间戳,而在另外一些情况下记录则包含一个事务的时间。

总之,任何情况下,记录都包含某种形式的时间标志用以说明数据在哪一时间是准确的。

  1. 粒度

粒度问题遍布于数据仓库体系结构的各个部分。粒度是指数据的细节或汇总程度,细节程度越高,粒度级别越低。粒度指每一行的含义,如日志表中的粒度就是用户每一次的操作记录,订单表中的粒度就是用户所下的订单。

粒度之所以是数据仓库环境的关键设计问题,是因为它极大地影响数据仓库的数据量和可以进行的查询类型。粒度级别越低,数据量越大,查询的细节程度越高,查询范围越广泛,反之依然。

数据库和数据仓库的区别

数据仓库是在传统数据库的基础之上发展起来的,但它并不是对传统数据库的彻底抛弃,而是旨在弥补传统数据库在数据分析能力方面的不足,以提供良好的大规模数据分析能力为己任,力图为决策提供有效的技术支持。

和传统数据库相比,数据仓库在总体特征、面向用户、存储内容等方面,都有着重大的差异(如下表)。

对比项操作型数据库分析型数据仓库
总体特征事务处理决策支持
系统目的日常的事务处理操作管理决策的数据依据
使用人员业务人员、DBA管理员、数据分析人员
访问连接类型增删改查读取为主,较少写入
操作方式主键或索引扫描
数据组织面向操作类型面向主题
数据内容当前数据历史性数据,归档数据,归纳数据
数据稳定性动态数据相对不变化的数据
数据规模1GB以下10GB以上
数据访问量每次处理的数据量不大每次分析请求大量数据
响应要求毫秒级 秒级对实时性要求不高

四、数仓模型

ER模型

ER模型是站在企业的角度从上往下按主题进行相似性组合和合并,并进行一致性处理,最经典的实践就是Teradata公司基于金融业务发布的FS-LDM(Finacial Services Logical Data Model),它将金融业务划分为10大主题,企业可基于这个模型快速落地自己的数据仓库。

ER模型常用于OLTP数据库建模,应用到构建数仓时更偏重数据整合, 站在企业整体考虑,将各个系统的数据按相似性一致性、合并处理,为数据分析、决策服务,但并不便于直接用来支持分析。缺陷:需要全面梳理企业所有的业务和数据流,周期长,人员要求高。

维度模型

维度建模是面向分析场景而生,针对分析场景构建数仓模型;重点关注快速、灵活的解决分析需求,同时能够提供大规模数据的快速响应性能。针对性强,主要应用于数据仓库构建和OLAP引擎低层数据模型。优点:不需要完整的梳理企业业务流程和数据,实施周期根据主题边界而定,容易快速实现demo,而且相对来说便于理解、提高查询性能、对称并易扩展。

维度模型更侧重于完成具体的分析决策需求,是一种从下往上的构建思路。同时,它关注大规模复杂查询的响应性能,星型模型是其具体形式。

除了以上两种外,还有Dan Linstedt提出的Data Valut模型和对其做进一步规范化处理的Anchor模型,但就目前实际使用情况而言,普遍采用的都是Kimball的维度模型及其变型,因此下面主要介绍维度模型框架下的相关概念。

维度建模下的主要概念

维度

维度建模的语境下,维度指的是环境,如你所处的城市、小区、公司、部门,商品所归属的一级大类、二级大类等。更通俗地理解是,维度指的是where和by后面跟着的字段,用来查询约束、分类汇总和排序。

事实

维度建模中的事实比维度更难理解,其实这里的事实指的是度量,如商品数量、成交金额、利润率等。度量业务过程的事实,一般为整型或浮点型的十进制数值,可分为可加、半可加和不可加三种类型。可加的事实指能够以任意维度直接汇总;半可加事实只能以特定维度汇总,如房屋面积可以按小区汇总,但不能按时间汇总,因为今天的房屋面积加昨天的房屋面积是没有意义的;不可加事实不具有可加性,如比率型事实,在任何维度下利润率加利润率都不具有实际含义。

维度表

维度表又称维表,维表存储的一般是对事实描述的信息。每一张维表对应现实世界中的一个对象或者概念。例如:用户、商品、日期、地区等。

缓慢变化维

缓慢变化维指维度并不是静态的,而是会随着时间的推移发生缓慢变化。通用的处理方法是,在不考虑存储成本的情况下可通过每天保留一份全量的快照数据来处理变化的维度,当有需要的时候取最近的维度表进行关联。除此之外,还有全量重写、增加行、增加列、开发拉链表等方法来处理这个问题。

事实表

事实表主要围绕业务过程设计,表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。每一个事实表的行包括:具有可加性的数值型的度量值、与维表相连接的外键。通常具有两个和两个以上的外键,外键之间表示维表之间多对多的关系。

事实事务表

用于描述业务过程,按业务过程的单一性或多业务过程可进一步分为单事务事实表和多事务事实表。其中单事务事实表分别记录每个业务过程,如下单业务记入下单事实表,支付业务记入支付事实表。多事务事实表在同一个表中包含了不同业务过程,如下单、支付、签收等业务过程记录在一张表中,通过新增字段来判断属于哪一个业务过程。

周期快照事务表

在一个确定的时间间隔内对业务状态进行度量,如用户每月使用信用卡的消费情况。

用于查看不同事件之间的时间间隔,例如分析用户从购买到支付的市场、从下单到订单完结的时长等,一般适用于有明确时间间隔的业务过程。

雪花模型是用以组织事实表和维度的模型之一。如上图,雪花模型的维度表会分得较为细碎,往往一张维度表下会包含好几个外键用以与下层的维度进行关联。

星型模型是雪花模型的退化形式。如上图,星型模型的地域维度表收敛成一张,当需要地域维度时事实表只需与这一张地域维度表关联即可。

退化和冗余

雪花模型和星座模型的组织形式很重要的目的就是节省存储空间。如中国可以用CHN表示,当有需要的时候再与维度表关联上展示全称“中华人民共和国”,假设通过这个方法每条记录可节省11个字节的话,那么一百万条记录就可节省约1MB,这在二十年前硬盘容量较少的情况下还是需要考虑的。

但是严格按照星型模型或雪花模型组织事实表和维度度带来的问题就是查询和应用事实表时需要多层关联,影响分析效率,因此目前实际采用的做法普遍都是把一些通用和使用频繁的维度表信息退化进事实表里形成一定程度的冗余,这样做法的原因如下:

1、从过去20的技术发展来看,存储成本的下降幅度要大于CPU和内存的下降幅度,同时存储成本占企业开销的占比也在不断下降,因此节约存储空间不是目前数仓建设最主要考虑的因素之一。

2、时间成本变得越来越重要。如果严格区分事实表和维度表,当需要事实表和维度表关联时join的时间开销是不得不考虑的。当业务急需某数据时,明明是一个select就能解决的事情,却要join好几张表花上好几倍时间才能得到相同的结果,这其实是很划不来的,更遑论需要维护的表的数量也是冗余后的好几倍乃至几十倍。

3、目前所采用的Hadoop框架下,担心的不是存储空间的大小,而是需要考虑如何减少MR启动的次数和查询时所用的到job的数量,这些会严重影响查询和统计的效率。由于每次join都要增加一个job,而严格按照星型模型和雪花模型组织时是需要大量join的,这就与目前的技术路线相悖了。

数据域

指面向业务分析,将业务过程或维度进行抽象的集合。业务过程是一个个不可拆分的行为事件,维度指度量的环境。在划分数据域时,既能涵盖当前所有的业务需求,又能在新业务进入时无影响地被包含进已有的数据域中。常见的数据域划分:商品域、日志域、交易域、互动域等。

业务过程

指企业的业务活动事件,如下单、支付、退款都是业务过程,通俗地讲,业务过程就是企业活动中不可拆分的行为事件。

粒度

粒度指的就是每一行的含义,如日志表中的粒度就是用户每一次的操作记录,订单表中的粒度就是用户所下的订单。

摘自:

  1. 《关于数仓基础知识的超全概括》
  2. 《数据仓库篇》——数据仓库的一些重要概念

以上是关于数据仓库概述的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库之理论概述

数据仓库之理论概述

数据仓库概述

数据仓库①:数据仓库概述

数据仓库| 概述| 集群环境搭建

基于hadoop的数据仓库工具:Hive概述