ITPub博客

首页 > 大数据 > 数据挖掘 > 【数据&技术】ETL构建企业级数据仓库五步法

【数据&技术】ETL构建企业级数据仓库五步法

数据挖掘 作者:sunjinshuang 时间:2015-05-13 09:06:35 0 删除 编辑

ETL

构建企业级数据仓库五步法

 

 

在数据仓库构建中,

ETL

贯穿于项目始终,它是整个数据仓库的生命线,包括了从数

据清洗,整合,到转换,加载等的各个过程,如果说数据仓库是一座大厦,那么

ETL

就是

大厦的根基,

ETL

抽取整合数据的好坏直接影响到最终的结果展现。所以

ETL

在整个数据

仓库项目中起着十分关键的作用,必须摆到十分重要的位置。

 

一、什么是

ETL

 

ETL

是数据抽取(

Extract

)、转换(

Transform

)、加载(

Load

 

)的简写,它是将

OLTP

系统中的数据经过抽取,

并将不同数据源的数据进行转换、整合,

得出一致性的数据,

然后

加载到数据仓库中。

简而言之

ETL

是完成从

OLTP

系统到

OLAP

系统的过程

(图一:

pic1.jpg

)

。

 

二、数据仓库的架构

 

数据仓库(

Data Warehouse \ DW

)是基于

OLTP

系统的数据源,为了便于多维分析和

多角度展现将其数据按特定的模式进行存储而建立的关系型数据库,它不同于多维数据库,

数据仓库中的数据是细节的,集成的,数据仓库是面向主题的,是以

OLAP

系统为分析目

的。它包括星型架构(图二:

pic2.jpg

)与雪花型架构(图三:

pic3.jpg

),其中星型架构中

间为事实表,四周为维度表,类似星星;

雪花型架构中间为事实表,两边的维度表可以再有

其关联子表,

而在星型中只允许一张表作为维度表与事实表关联,

雪花型一维度可以有多张

表,而星型不可以。考虑到效率时,星型聚合快,效率高,不过雪花型结构明确,便于与

OLTP

系统交互。在实际项目中,我们将综合运用星型架构与雪花型架构。

 

三、

ETL

构建企业级数据仓库五步法的流程

 

(一)、确定主题

 

   

即

 

确定数据分析或前端展现的某一方面的分析主题,例如我们分析某年某月某一地区的

啤酒销售情况,就是一个主题。主题要体现某一方面的各分析角度(维度)和统

 

计数值型

数据(量度),确定主题时要综合考虑,一个主题在数据仓库中即为一个数据集市,数据集

市体现了某一方面的信息,多个数据集市构成了数据仓库。

 

(二)、确定量度

 

在确定了主题以后,

我们将考虑要分析的技术指标,

诸如年销售额此类,

一般为数值型

数据,

或者将该数据汇总,或者将该数据取次数,

独立次数或取最大最小值等,这样的数据

称之为量度。

量度是要统计的指标,

必须事先选择恰当,

基于不同的量度可以进行复杂关键

性能指标(

KPI

)等的计算。

 

(三)、确定事实数据粒度

 

在确定了量度之后我们要考虑到该量度的汇总情况和不同维度下量度的聚合情况,

考虑

到量度的聚合程度不同,

我们将采用“最小粒度原则”,

即将量度的粒度设置到最小,

例如

我们将按照时间对销售额进行汇总,

目前的数据最小记录到天,

即数据库中记录了每天的交

易额,那么我们不能在

ETL

时将数据进行按月或年汇总,需要保持到天,以便于后续对天

进行分析。而且我们不必担心数据量和数据没有提前汇总带来的问题,因为在后续的建立

CUBE

时已经将数据提前汇总了。

 

(四)、确定维度

 

    

维度是要分析的各个角度,

例如我们希望按照时间,

或者按照地区,

或者按照产品进行分

析,那么这里的时间、地区、产品就是相应的维度,基于不同的维度我们可以看到各量度的

汇总情况,我们可以基于所有的维度进行交叉分析。这里我们首先要确定维度的层次

(

Hierarchy

)和级别(

Level

)(图四:

pic4.jpg

),

 

维度的层次是指该维度的所有级别,包

括各级别的属性;

维度的级别是指该维度下的成员,

例如当建立地区维度时我们将地区维度

作为一个级别,层次为省、市、县

 

三层,考虑到维度表要包含尽量多的信息,所以建立维

度时要符合“矮胖原则”,

即维度表要尽量宽,

尽量包含所有的描述性信息,

而不是统计性

的数据信息。

 

    

还有一种常见的情况,就是父子型维度(图五:

pic5.jpg

),

 

该维度一般用于非叶子节点

含有成员等情况,

例如公司员工的维度,

在统计员工的工资时,

部门主管的工资不能等于下

属成员工资的简单相加,必须对该主管的工资

 

单独统计,然后该主管部门的工资等于下属

员工工资加部门主管的工资,

那么在建立员工维度时,

我们需要将员工维度建立成父子型维

度,这样在统计时,主管的工

 

资会自动加上,避免了都是叶子节点才有数据的情况。

 

    

另外,在建立维度表时要充分使用代理键,代理键是数值型的

ID

号码,好处是代理键唯

一标识了每一维度成员信息,便于区分,更重要的是在聚合时由于数值型匹配,

JOIN

效率

高,

便于聚合,

而且代理键对缓慢变化维度有更重要的意义,

它起到了标识历史数据与新数

据的作用,

在原数据主键相同的情况下,

代理键起到了对新数据与历史数据非常重要的标识

作用。

 

    

有时我们也会遇到维度缓慢变化的情况,比如增加了新的产品,或者产品的

ID

号码修改

了,

或者产品增加了一个新的属性,

此时某一维度的成员会随着新的数据的加入而增加新的

维度成员,这样我们要考虑到缓慢变化维度的处理,对于缓慢变化维度,有三种情况:

 

1

、缓慢变化维度第一种类型:历史数据需要修改。这样新来的数据要改写历史数据,

这时我们要使用

UPDATE

,例如产品的

ID

号码为

123

,后来发现

ID

号码错误了,需要改

写成

456

,那么在修改好的新数据插入时,维度表中原来的

ID

号码会相应改为

456

,这样

在维度加载时要使用第一种类型,做法是完全更改。

 

2

、缓慢变化维度第二种类型:历史数据保留,新增数据也要保留。这时要将原数据更

新,将新数据插入,需要使用

UPDATE / INSERT

,比如某一员工

2005

年在

A

部门,

2006

年时他调到了

B

部门。

那么在统计

2005

年的数据时就应该将该员工定位到

A

部门;

而在统

计

2006

年数据时就应该定位到

B

部门,

然后再有新的数据插入时,

将按照新部门

(

B

部

 

门)

进行处理,

这样我们的做法是将该维度成员列表加入标识列,

将历史的数据标识为“过期”,

将目前的数据标识为“当前的”。另一种方法是将该维度打上时间

 

戳,即将历史数据生效

的时间段作为它的一个属性,

在与原始表匹配生成事实表时将按照时间段进行关联,

这样的

好处是该维度成员生效时间明确。

 

3

、

 

缓慢变化维度第三种类型:新增数据维度成员改变了属性。例如某一维度成员新

加入了一列,该列在历史数据中不能基于它浏览,而在目前数据和将来数据中可以按

 

照它

浏览,

那么此时我们需要改变维度表属性,

即加入新的列,

那么我们将使用存储过程或程序

生成新的维度属性,在后续的数据中将基于新的属性进行查看。

 

(五)、创建事实表

 

在确定好事实数据和维度后,我们将考虑加载事实表。

 

在公司的大量数据堆积如山时,我们想看看里面究竟是什么,结果发现里面是一笔笔

生产记录,一笔笔交易记录

… 

那么这些记录是我们将要建立的事实表的原始数据,即关于

某一主题的事实记录表。

 

我们的做法是将原始表与维度表进行关联,生成事实表(图六:

pic6.jpg

)。

 

注意在关

联时有为空的数据时

(数据源脏),

需要使用外连接,连接后我们将各维度的代理键取出放

于事实表中,事实表除了各维度代理键外,还有各量度数据,这

 

将来自原始表,事实表中

将存在维度代理键和各量度,

而不应该存在描述性信息,

即符合“瘦高原则”,

即要求事实

表数据条数尽量多(粒度最小),而描述性信息

 

尽量少。

 

如果考虑到扩展,可以将事实表加一唯一标识列,以为了以后扩展将该事实作为雪花

型维度,不过不需要时一般建议不用这样做。

 

事实数据表是数据仓库的核心,需要精心维护,在

JOIN

后将得到事实数据表,一般记

录条数都比较大,

我们需要为其设置复合主键和索引,

以为了数据的完整性和基于数据仓库

的查询性能优化,

事实数据表与维度表一起放于数据仓库中,

如果前端需要连接数据仓库进

行查询,我们还需要建立一些相关的中间汇总表或物化视图,以方便查询。

 

三、

ETL

中高级技巧的运用

 

(一)、准备区的运用

 

在构建数据仓库时,如果数据源位于一服务器上,数据仓库在另一服务器端,考虑到数

据源

Server

端访问频繁,并且数据量大,需要不断更新,所以可以建立准备区数据库(图

七:

pic7.jpg

)。先将数据抽取到准备区中,然后基于准备区中的数据进行处理,这样处理

的好处是防止了在原

OLTP

系统中中频繁访问,

进行数据运算或排序等操作。

例如我们可以

按照天将数据抽取到准备区中,

基于数据准备区,

我们将进行数据的转换,

整合,

将不同数

据源的数据进行一致性处理。

数据准备区中将存在原始抽取表,

一些转换中间表和临时表以

及

ETL

日志表等。

 

(二)、时间戳的运用

 

时间维度对于某一事实主题来说十分重要,

因为不同的时间有不同的统计数据信息,

那

么按照时间记录的信息将发挥很重要的作用。在

ETL

中,时间戳有其特殊的作用,在上面

提到的缓慢变化维度中,

我们可以使用时间戳标识维度成员;

在记录数据库和数据仓库的操

作时,我们也将使用时间戳标识信息,例如在进行数据抽取时,我们将按照时间戳对

OLTP

系统中的数据进行抽取,

比如在午夜

0

:

00

取前一天的数据,

我们将按照

OLTP

系统中的时

间戳取

GETDATE

到

GETDATE

减一天,这样得到前一天数据。

 

(三)、日志表的运用

 

在对数据进行处理时,难免会发生数据处理错误,产生出错信息,那么我们如何获得出

错信息并及时修正呢

? 

方法是我们使用一张或多张

Log

日志表,将出错信息记录下来,在

日志表中我们将记录每次抽取的条数,

处理成功的条数,

处理失败的条数,

处理失败的数据,

处理时间等等,

这样当数据发生错误时,

我们很容易发现问题所在,

然后对出错的数据进行

修正或重新处理。

 

(四)、使用调度

 

在对数据仓库进行增量更新时必须使用调度(图八:

pic8.jpg

),

 

即对事实数据表进行

增量更新处理,

在使用调度前要考虑到事实数据量,

需要多长时间更新一次,

比如希望按天

进行查看,那么我们最好按天进行抽取,如果数据量

 

不大,可以按照月或半年对数据进行

更新,

如果有缓慢变化维度情况,

调度时需要考虑到维度表更新情况,

在更新事实数据表之

前要先更新维度表。

 

调度是数据仓库的关键环节,要考虑缜密,在

ETL

的流程搭建好后,要定期对其运行,

所以调度是执行

ETL

流程的关键步骤,

每一次调度除了写入

Log

日志表的数据处理信息外,

还要使用发送

Email

或报警信息等,这样也方便的技术人员对

ETL

流程的把握,增强了安

全性和数据处理的准确性。

 

四、总结

 

ETL

构建数据仓库需要简单的五步,掌握了这五步的方法我们将构建一个强大的数据

仓库,

不过每一步都有很深的需要研究与挖掘,尤其在实际项目中,我们要综合考虑,

例如

如果数据源的脏数据很多,

在搭建数据仓库之前我们首先要进行数据清洗,

以剔除掉不需要

的信息和脏数据。

 

总之,

ETL

是数据仓库的核心,掌握了

ETL

构建数据仓库的五步法,就掌握了搭建数

据仓库的根本方法。不过,我们不能教条,基于不同的项目,我们还将要进行具体分析,如

父子型维度和缓慢变化维度的运用等。在数据仓库构建中,

ETL

关系到整个项目的数据质

量,所以马虎不得,必须将其摆到重要位置,将

ETL

这一大厦根基筑牢!

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/14146064/viewspace-1651759/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2015-03-16

  • 博文量
    42
  • 访问量
    329861