数据仓库开发的一些心得

Posted 实施晓记

tags:

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


       在数据仓库的开发过程中,需要熟悉大量的概念以及相关工具的使用,还需要了解宏观上的各种开发流程,串联起来完成最终的数据仓库项目的开发,本篇介绍一些准备工作,包括涉及到的工具介绍,以及开发过程的描述,记录学习研究的印记,并和大家讨论研究存在的相关问题。


       数据仓库的开发,是完全独立于OLTP系统的,也就是独立于当前各种应用的业务系统而作的分析项目,因此要包含从数据的迁移(提取)、变换、清洗、加载等ETL操作,其中可以分为这么几个数据层。

源数据层
       客户的各种业务系统中的数据,如包括企业、车辆和司机信息系统、企业录入数据和及营运等数据,里面存放了大量的事务数据。

ODS数据层
       数据库用户ODS数据层主要管理把业务数据层的数据存储到ODS数据层,它的数据表主要就是来源于业务数据表,通过一些存储过程把业务数据表结构改变成基层的数据仓库的表结构。

DW数据层
       数据库用户DW主要管理把ODS数据层的数据存储到DW数据层,它的数据表主要就是来源于ODS数据表,通过一些存储过程把ODS数据表结构改变成项目主题数据仓库的表结构。
       DW数据层还管理一些对存储过程的记录表,方便数据仓库的维护和管理。

       ODS是一个面向主题的、集成的、可变的、当前的细节数据集合,用于支持企业对于即时性的、操作性的、集成的全体信息的需求。常常被作为数据仓库的过渡,也是数据仓库项目的可选项之一。

       因 此操作数据存储(ODS) 是用于支持企业日常的全局应用的数据集合,ODS的数据具有面向主题、集成的、可变的和数据是当前的或是接近当前的4个基本特征。同样也可以看出ODS是 介于DB和DW 之间的一种数据存储技术,和原来面向应用的分散的DB相比,ODS中的数据组织方式和数据仓库(DW)一样也是面向主题的和集成的,所以对进入ODS的数 据也象进入数据仓库的数据一样进行集成处理。另外ODS只是存放当前或接近当前的数据,如果需要的话还可以对ODS中的数据进行增、删和更新等操 作,虽然DW中的数据也是面向主题和集成的,但这些数据一般不进行修改,所以ODS和DW的区别主要体现数据的可变性、当前性、稳定性、汇总度上。

为什么需要有一个ODS系统呢?一般在带有ODS的系统体系结构中,ODS都具备如下几个作用:

1) 在业务系统和数据仓库之间形成一个隔离层。

2) 转移一部分业务系统细节查询的功能。

3) 完成数据仓库中不能完成的一些功能。

       这里我们就需要用到了IBM的DataStage工具。 DataStage 是一套专门对多种操作数据源的数据抽取、转换和维护过程进行简化和自动化,并将其输入数据集市或数据仓库目标数据库的集成工具。
       DataStage 可以从多个不同的业务系统中,从多个平台的数据源中抽取数据,完成转换和清洗,装载到各种系统里面。其中每步都可以在图形化工具里完成,同样可以灵活地被 外部系统调度,提供专门的设计工具来设计转换规则和清洗规则等,实现了增量抽取、任务调度等多种复杂而实用的功能。其中简单的数据转换可以通过在界面上拖 拉操作和调用一些DataStage预定义转换函数来实现,复杂转换可以通过编写脚本或结合其他语言的扩展来实现,并且DataStage提供调试环境, 可以极大提高开发和调试抽取、转换程序的效率。
DataStage是基于客户机/服务器的数据集成架构,优化数据收集,转换和巩固的过程。它提供了一套图形化的客户工具: 
  包括:Designer(设计者):创建执行数据集成任务Job的同时,对数据流和转换过程创建一个可视化的演示。 
  Manager(管理者):对每个工程的各个单元,包括:库表定义,集中的数据转换,元数据连接等对象进行分类和组织。 
  Director(指挥者):为启动,停止,监视作业提供交互式控制。 
  Administrator(管理者):在服务器端管理DataStage的项目和使用者权限的分配 

数据仓库开发的一些心得

 

       启动Designer,我们可以在其中创建各种数据复制的Job,然后通过串联起来,完成整个业务数据的定时提取工作,所有工作可以在可视化界面上进行操作,还是比较方便的。

数据仓库开发的一些心得

 

       下图是对于不同数据源之间的数据复制过程,中间有一个Transformer的变换对象来处理数据列之间的映射关系的。

数据仓库开发的一些心得

 

       下图是串联各种Job对象,组装成一个完成的数据复制流程。

数据仓库开发的一些心得

 

       完成上面的业务数据整合复制后,就需要通过编写大量的存储过程,完成从ODS数据层到DW数据仓库层的数据清洗加载操作了,一般我们可以在Pl/Sql Developer中完成相关存储过程的编写,如下图所示:

数据仓库开发的一些心得

 

       通过存储过程完成数据从ODS层到DW数据仓库层的转移后,下一步就是要围绕数据仓库的模型做各种应用的分析工作了,这时候就需要用到非常强大的BI工具Business Objects了。

       在众多的管理信息系统中一般都应用数据仓库技术,进行数据的统计和分析,而数据仓库的建立、使用、管理及维护等方面都需要工具的支持。有些管理信息 系统的业务处理数据库同数据仓库系统一起推广使用,因此大大减少了从业务数据库到数据仓库的数据抽取、集成和转换的复杂程度,但无论数据仓库中数据的来源 和抽取方式是什么,对数据仓库的维护、管理、分析、统计都需要用客户端报表/分析工具来完成。在众多的联机分析处理产品中,BO公司的Business Object不失为一个好工具。

       Business Object具有以下几个特点:前端分析手段灵活,表现方式多样,语义层构建工具应用面广,应用简单,具有文档管理的数据刷新功能,可以利用资料库对不同用户的操作权限进行管理。
Business Object是一个由多个产品组成的产品族,主要包括Business Object,Designer,Document Agent,Supervisor,Business Miner五个产品。这几个产品功能如下:

(1)Bupervisor:Supervisor是BO自身的安全管理工具。在Spervisor中可以建立和维护资料库,在资料库中可以建立 BO的用户和用户组,通过对不同用户赋予不同的操作权限,来实现对Business Object的使用用户、定制查询(universe)以及查询报告的安全管理。实际上多个用户定制查询及查询结果的共享时通过资料库实现的。

(2)Designer:Designer是一个多编模型构建工具,它可以将关系库中的表通过类、对象及对象明细等工具映射到多维模型的维、维元素及度量指标上,使用户在符合业务逻辑的多维模型上构建查询。

(3)Business Object:Business Object是一个查询定制和统计报表(图形)生成工具。它利用Designer建立多维模型定制各类查询,查询方式包括Business Object定制查询语义层(universe)、手写SQL语句、存储过程及个人数据文件等,在Business Object 4 1版中还将支持OLAP Pannel,从而使其可以利用其他厂商的OLAP服务器的功能。Business Object将查询结果以多种报表形式及统计图形的方式提交给用户。用户可以在查询结果上进行进一步的分析,如向下/向上钻取(Drill Up/Drill Down)等。另外,在Business Object中还提供了一种script语言,?该语言风格类似Visual Basic,在程序中可以以面向对象的编程风格调用Business Object提供的丰富类库。得script语言可以定制出更为友好的查询界面。

(4)Document Agent:Document Agent是专为工作组用户的文档管理及查询结果刷新而建立的。一组用户对应一个Document Agent,不同用户的查询报表(图形)均可发送到Document Agent供同组的其他用户共享。Document Agent还可以定义统计报表(图形)的刷新频度。

在管理机构由于用户的不同使应用角色与工具也不尽相同:
(1)报表设计人员:负责制作固定报表以外的灵活报表,使用工具为BO;负责根据业务需求定制新的固定报表,使用工具为BO Designer;承担前台报表的分发、管理及刷新,使用工具为BO Document Agent。

(2)普通报表用户和高级报表用户:L浏览固定报表,使用工具为BO Reader;浏览报表设计人员设计的灵活报表,使用工作为BO Reader。

(3)数据仓库管理员:完成数据库管理员(DBA)的正常工作;负责数据仓库数据的刷新维护、用户管理等工作,使用工具主要是数据库的管理工具以及BO Supervisor。

       通过BO Designer,完成表之间的语义关系的设计以及相关度量、维度的设计,为报表设计奠定基础。

数据仓库开发的一些心得

 

       通过BO控制台,启动InfowView,对报表进行相关的设计工作。

数据仓库开发的一些心得

 数据仓库开发的一些心得

 

       完成以上工作后,报表的前端展示其实是比较方便的,可以通过调用BO的报表生成页面就可以了,给报表生成页面附带相关的参数即可,具体的例子可以参考BO自带的很多相关Demo,在此不再赘述。

数据仓库开发的一些心得

 

       上述的内容只是我对数据仓库应用的初步了解和认识,纰漏之处难免,随着学习的进行,认识的深入,应用的开展,项目经验的增加,希望更多东西能够明朗化,深入化,坚固化。


       在上篇随笔《数据仓库开发之路之一--准备工作》中粗略介绍了一下数据仓库项目应用中涉及到的一些知识和工具,其中涉及到了ETL工具DataStage、BI商务智能工具BO(Business Objects),这两款软件都是一个工具包的集合,包含了很多软件集合的。

       数据仓库整体项目流程是一个比较复杂的过程,设计到不少内容,从横向来看,一般可以分为:

1)数据整合层,或者称为操作数据层(ODS),根据项目的需要,可以选用。

2)数据仓库层,也就是所谓的DW层。

3)使用BO的Universe设计的数据库语义层,相关于物理表和报表视图的隔离层。

4)使用BO的Infoview设计报表(如Web Intelligence 报表文档)。

 

       其中1、2是数据准备阶段,3,4是数据应用阶段,准备阶段一般使用ETL工具DataStage和自己编写的各类存储过程来实现,后面的应用阶段,主要使用了BO的套件来完成报表的设计及开发展现等工作。

如一般的横向开发流程示意图如下所示:

数据仓库开发的一些心得

       在DataStage开发过程中,重头戏是使用DataStage Designer来进行各种任务及任务序列的设计工作,然后利用DataStage Diretor进行相关的调度设计即可。在使用DataStage Designer过程中,总结了一下开发流程,大致如下所示:

1)设计细粒度的复制数据的Server Job,然后串联各类表的Server Job(任务)作为一个主题的Job Sequence(任务序列),最后是串联各主题形成一个大主题的Job Sequence。类似于企业从小组到大部门再到大片区(或更大集权部门)的一种向上集权机制。这样的好处是,我们在调度的时候,只需要调度最大一个 Job Sequence即可。

2)建立一个调用存储过程的ETL Job(STP Stage类型),并记录结果。这个ETL Job调用的存储过程就是我们自定义进行数据清理加载到数据库的操作,是指从ODS-》DW的数据操作。

3)串联形成一个完整的数据仓库项目Job,如串联1、2点的相关大主题任务为ODS->ETL。

4)使用Director创建执行时间及周期,这样系统可以自动运行进行相关的调度操作了。

数据仓库开发的一些心得

数据仓库开发的一些心得

 

       在数据仓库开发设计总,ETL是整个过程的核心灵魂,这里的DataStage做了一部分工作,但是数据的清洗和数据仓库加载的操作还需要自己编写很多存储过程来完成,以便达到灵活处理,方便为何之目的。

       这里设计到了数据仓库表、视图等的设计以及存储过程的设计编写操作,因此一般需要遵守好各方面的命名规则及协议,以便达到方便维护管理之目的,各种内容分门别类好,对大量表、视图、存储过程等元数据的管理很有帮助。

这里谈谈ETL设计要点:

1)建立表命名、视图、存储过程等内容的命名规则,如数据表比较多,一般建议采用按用户名Schema的方式来区分不同的数据层,如操作数据层 ODS,则可以建立一个ODS的用户Schema来进行管理、数据仓库DW层,则建立DW的用户Schema来进行管理,这样可以在逻辑以及表的命名空间 上(物理上)区分不同的内容,实现性能的最大化。如下面是一种规则界定:数据仓库中,表及视图的命名规则:表以T开头,视图以V开头。下滑线后连接数据仓库主题的拼音缩写,如出租主题即为C,客运主题即为K,从业人员主题即为CY,依此类推。表名及视图名称的主体为汉语拼音,前面两个全拼,后面的以开头字母为缩写。例如:出租的车辆基本信息表为T_C_CheLiangJBXX。详见下表。 



出租行业

客运行业

货运行业

……

基础表

T_J_XXX

基本信息表

T_C_XXJBXX

T_K_XXJBXX

T_H_XXJBXX


业务事实表

T_C_XX_F

T_K_XX_F

T_H_XX_F


月汇总表

T_C_XX_(F)_Month

T_K_XX_(F)_Month

T_K_XX_(F)_Month


周汇总表

T_C_XX_(F)_Week

T_K_XX_(F)_Week

T_H_XX_(F)_Week


视图

V_C_XXX

V_K_XXX

V_H_XXX



2) 如果表数据比较少或者基于其他原因考虑,也可以考虑通过前缀的方式进行区分,如ODS层的数据,如使用ODS_T_Accuse、 ODS_T_QIYEPQ这种方式命名、DW层常用时间维度使用DW_DIM_TIME、事实表采用DW_F_H_YUNLIFENXI来表示,DW业务 维度采用DW_D_H_DUNWEI来表示。

3)建立不同的Package来存放不同业务范围的存储过程,如维度可用PKG_LOAD_DIM来命名、时间维度可以用 PKG_LOAD_DIM_TIME来命名、事实表可以用PKG_LOAD_FACT_TAXI来命名等,包体里面的存储过程要清晰,附带必要的功能说 明,最好在文档的一个表格中详细说明包体及存储过程函数的各种信息,如数据库详细说明那样(PKG是业务定义字母,不同业务用不同的区分)。

4)如果采用不同用户Schema来区分不同的数据层的做法,那么需要为DW层、ODS层指定不同的表空间及存储大小等,以便利用不同物理存储带来的性能方面的提升。

 如下面是一个存储过程的组织实例图:

数据仓库开发的一些心得

 

       设计好数据仓库的相关内容后,接着就是需要进行另外一个重要的操作,就是语义设计和报表设计了,这两项工作是通过BO工具进行完成,前期的工作都是为后面两步进行准备的。

       Universe设计,就是在语义层指定表自己的关系,主题的度量值、维之间的层次关系(以便实现报表向上向下钻取的操作),Universe设计,其实就是在报表的使用对象和实际的表对象之间建立一个逻辑对应关系以及隔离关系。

数据仓库开发的一些心得

数据仓库开发的一些心得

 

       做好这些,就需要在BO的InfoView里面设计好相关的报表,通过选定Universe文件后,然后再主界面中拖拉各种维度以及度量值,就可以 很方面的创建各类报表,图表则拖拉报表模板进去,然后拖动维度和度量到模板中,加载数据就可以实现报表的数据显示了,如下所示:

 先总结写到这里,有心得再继续记录了。

图文转载:https://www.cnblogs.com/en

d/archive/2012/07/26/2609900.html



以上是关于数据仓库开发的一些心得的主要内容,如果未能解决你的问题,请参考以下文章

数据仓库架构以及多维数据模型的设计

大数据开发|Hive数据仓库环境构建

数据仓库的构建思路|大数据付费交流群 第十期分享(整理)

数据仓库的ETLOLAP和BI应用

github 创建网络仓库 ,使用git工具将本地文件上传/删除 --- 心得

数据仓库开发人员怎么避免成为取数机器?