文章目录

  • 基本架构
  • 主要数据仓库架构
    • 1.数据集市架构
    • 2.Inmon企业信息工厂架构
    • 3.Kimball数据仓库架构
    • 4.混合型数据仓库架构
  • 操作数据存储
  • 抽取-转换-装载
    • 1.数据抽取
      • 逻辑抽取
      • 物理抽取
    • 2.数据转换
    • 3.数据装载
  • 开发ETL系统的方法
  • 常见ETL工具
  • 小结

基本架构

把数据仓库架构理解成构成数据仓库的组件及其之间的关系,那么数据仓库架构如图所示:

图中显示的整个数据仓库环境包括操作型系统和数据仓库系统两大部分。操作型系统的数据由各种形式的业务数据组成,这其中可能有关系数据库、TXT或CSV文件、HTML或XML文档,还可能存在外部系统的数据,比如网络爬虫抓取来的互联网数据等,数据可能是结构化、半结构化、非结构化的。这些数据经过抽取、转换和装载(ETL)过程进入数据仓库系统

主要数据仓库架构

在数据仓库技术演化过程中,产生了几种主要的架构方法,包括数据集市架构Inmon企业信息工厂架构Kimball数据仓库架构混合型数据仓库架构

1.数据集市架构

数据集市是按主题域组织的数据集合,用于支持部门级的决策。有两种类型的数据集市:独立数据集市从属数据集市

独立数据集市
集中于部门所关心的单一主题域,数据以部门为基础部署,无须考虑企业级别的信息共享与集成。独立数据集市架构如图所示:

优点: 周期短、见效快。
缺点: 需要分析跨部门或跨主题域的数据时,独立数据市场会显得力不从心。
从属数据集市
数据来源于数据仓库。数据仓库里的数据经过整合、重构、汇总后传递给从属数据集市。从属数据集市的架构如图所示:

建立从属数据集市的好处主要有:
性能: 当数据仓库的查询性能出现问题,可以考虑建立几个从属数据集市,将查询从数据仓库移出到数据集市。
安全: 每个部门可以完全控制他们自己的数据。
数据一致: 因为每个数据集市的数据来源都是同一个数据仓库,有效消除了数据不一致的情况。

2.Inmon企业信息工厂架构


企业级数据仓库: 是该架构中的核心组件。正如Inmon数据仓库所定义的,企业级数据仓库是一个细节数据的集成资源库。其中的数据以最低粒度级别被捕获,存储在满足三范式设计的关系数据库中。
部门级数据集市: 是面向主题数据的部门级视图,数据从企业级数据仓库获取。**数据集市使用多维模型设计,用于数据分析。**所有的数据分析应用都从数据集市查询数据,而不是直接查询企业级数据仓库。

3.Kimball数据仓库架构

Kimball数据仓库架构如图所示:

Kimball的数据仓库包含高粒度的企业数据,使用多维模型设计,这也意味着数据仓库由星型模式的维度表和事实表构成。分析系统或报表工具可以直接访问多维数据仓库里的数据。这里的数据集市是一个逻辑概念,只是多维数据仓库中的主题域划分,并没有自己的物理存储。

4.混合型数据仓库架构

混合型数据仓库架构如图所示。

所谓的混合型结构,指的是在一个数据仓库环境中,联合使用Inmon和Kimball两种架构。 使用这种架构的好处是,既可以利用规范化设计消除数据冗余,保证数据的粒度足够细;又可以利用多维结构更灵活地在企业级实现报表和分析。

操作数据存储

操作数据存储又称为ODS,其定义是这样的:一个面向主题的、集成的、可变的、当前的细节数据集合。

在一个数据仓库环境中,ODS具有如下几个作用
1.充当业务系统与数据仓库之间的过渡区。 ODS中存放的数据从数据结构、数据粒度、数据之间的逻辑关系上都与业务系统基本保持一致,因此抽取过程只需简单的数据复制而基本不再需要做数据转换,大大降低了复杂性。
2.转移部分业务系统细节查询的功能。 某些原来由业务系统产生的报表、细节数据的查询能够在ODS中进行,从而降低业务系统的查询压力。
3.完成数据仓库中不能完成的一些功能。 用户有时会要求数据仓库查询最低粒度级别的细节数据,而数据仓库中存储的数据一般都是聚合或汇总过的数据,这时就需要把细节数据查询的功能转移到ODS来完成。

抽取-转换-装载

ETL系统的工作就是要把异构的数据转换成同构的。

抽取: 从操作型数据源获取数据。
转换: 转换数据,使之转变为适用于查询和分析的形式和结构。
装载: 将转换后的数据导入到最终的目标数据仓库。

1.数据抽取

抽取操作从源系统获取数据给后续的数据仓库环境使用。通常数据都不是只抽取一次,而是需要以一定的时间间隔反复抽取,通过这样的方式把数据的所有变化提供给数据仓库,并保持数据的及时性。抽取方法有逻辑抽取物理抽取两种:

逻辑抽取

有两种逻辑抽取类型:全量抽取和增量抽取。
(1)全量抽取
源系统的数据全部被抽取。 一个全表导出的数据文件或者一个查询源表所有数据的SQL语句,都是全量抽取的例子。
(2)增量抽取
只抽取某个事件发生的特定时间点之后的数据。 通过该事件发生的时间顺序能够反映数据的历史变化。
抽取处理需要重点考虑增量抽取,也被称为变化数据捕获。常用的变化数据捕获方法有时间戳、快照、触发器和日志四种。

物理抽取

依赖于选择的逻辑抽取方法和能够对源系统所做的操作和所受的限制,存在两种物理数据抽取机制:直接从源系统联机抽取或者间接从一个脱机结构抽取数据
(1)联机抽取
数据直接从源系统抽取。抽取进程或者直连源系统数据库,访问它们的数据表,或者连接到一个存储快照日志或变更记录表的中间层系统。注意这个中间层系统并不需要必须和源系统物理分离。
(2)脱机抽取
数据不从源系统直接抽取,而是从一个源系统以外的过渡区抽取。过渡区可能已经存在(例如数据库备份文件、关系数据库系统的重做日志、归档日志等),或者抽取程序自己建立。应该考虑以下的存储结构:

2.数据转换

数据从操作型源系统获取后,需要进行多种转换操作。如统一数据类型、处理拼写错误、消除数据歧义、解析为标准格式等。数据转换通常是最复杂的部分,也是ETL开发中用时最长的一步
数据转换一个最重要的功能是清洗数据,目的是只有“合规”的数据才能进入目标数据仓库。

3.数据装载

ETL的最后步骤是把转换后的数据装载进目标数据仓库。
这步操作需要重点考虑两个问题:
一是数据装载的效率问题
可以从以下几方面入手。首先保证足够的系统资源。数据仓库存储的都是海量数据,所以要配置高性能的服务器,并且要独占资源,不要与别的系统共用。在进行数据装载时,要禁用数据库约束(唯一性、非空性,检查约束等)和索引,当装载过程完全结束后,再启用这些约束,重建索引,这种方法会很大的提高装载速度。
二是一旦装载过程中途失败了,如何再次重复执行装载过程。
数据装载过程可能由于多种原因而失败,比如装载过程中某些源表和目标表的结构不一致而导致失败,而这时已经有部分表装载成功了。在数据量很大的情况下,如何能在重新执行装载过程时只装载失败的部分是一个不小的挑战。对于这种情况,实现可重复装载的关键是要**记录下失败点,并在装载程序中处理相关的逻辑。**还有一种情况,就是装载成功后,数据又发生了改变(比如有些滞后的数据在ETL执行完才进入系统,就会带来数据的更新或新增),**这时需要重新再执行一遍装载过程,已经正确装载的数据可以被覆盖,但相同数据不能重复新增。**简单的实现方式是先删除再插入,或者用replace into、merge into等类似功能的操作。

开发ETL系统的方法

开发一个ETL系统,常用的方式是使用数据库标准的SQL及其程序化语言,如Oracle的PL/SQL和MySQL的存储过程、用户自定义函数(UDF)等。还可以使用Kettle这样的ETL工具,这些工具都提供多种数据库连接器和多种文件格式的处理能力,并且对ETL处理进行了优化。使用工具的最大好处是减少编程工作量,提高工作效率。如果遇到特殊需求或特别复杂的情况,可能还是需要使用Shell、Java、Python等编程语言开发自己的应用程序。

ETL过程要面对大量的数据,因此需要较长的处理时间。为了提高ETL的效率,通常这三步操作会并行执行。当数据被抽取时,转换进程同时处理已经收到的数据。一旦某些数据被转换过程处理完,装载进程就会将这些数据导入目标数据仓库,而不会等到前一步工作执行完才开始。

常见ETL工具

传统大的软件厂商一般都提供ETL工具软件,如Oracle的OWB和ODI、微软的SQL Server Integration Services、SAP的Data Integrator、IBM的InfoSphere DataStage、Informatica等。这里简单介绍另外一种开源的ETL工具——Kettle
Kettle的使用场景包括: 在应用或数据库间迁移数据、把数据库中的数据导出成平面文件、向数据库大批量导入数据、数据转换和清洗、应用整合等。
Kettle里主要有**“转换”和“作业”**两个功能模块。
转换是ETL解决方案中最主要的部分,它处理ETL各阶段各种对数据的操作。转换有输入、输出、检验、映射、加密、脚本等很多分类,每个分类中包括多个步骤,如输入转换中就有表输入、CSV文件输入、文本文件输入等很多步骤。
转换是以并行方式执行的,而作业则是以串行方式处理的
验证数据表是否存在这样的操作就需要作业来完成。一个作业包括一个或多个作业项,作业项是以某种顺序来执行的。作业也有很多分类,每个分类中包括多个作业项。作业项也可以是一个作业,此时称该作业为子作业。

小结

(1)数据仓库是一个面向主题的、集成的、随时间变化的、非易失的数据集合,用于支持管理者的决策过程。
(2)数据仓库中的粒度是指数据的细节或汇总程度,细节程度越高,粒度级别越低。
(3)数据仓库的数据来自各个业务应用系统。
(4)很多因素导致直接访问业务系统无法进行全局数据分析的工作,这也是需要一个数据仓库的原因所在。
(5)操作型系统是一类专门用于管理面向事务的应用信息系统,而分析型系统是一种快速回答多维分析查询的实现方式,两者在很多方面存在差异。
(6)构成数据仓库系统的主要组成部分有数据源、ODS、中心数据仓库、分析查询引擎、ETL、元数据管理和自动化调度。
(7)主要的数据仓库架构有独立数据集市、从属数据集市、Inmon企业信息工厂、Kimball多维数据仓库、混合型数据仓库。
(8)ETL是建立数据仓库最重要的处理过程,也是最体现工作量的环节。
(9)Kettle是常用的开源ETL工具。
(10)数据仓库的基本需求是安全性、可访问性、自动化,对数据的要求是准确性、时效性、历史可追溯性。