在上篇随笔《数据仓库开发之路之一--准备工作》中粗略介绍了一下数据仓库项目应用中涉及到的一些知识和工具,其中涉及到了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来进行管理,这样可以在逻辑以及表的命名空间上(物理上)区分不同的内容,实现性能的最大化。如下面是一种规则界定:
1)数据仓库中,表及视图的命名规则:表以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文件后,然后再主界面中拖拉各种维度以及度量值,就可以很方面的创建各类报表,图表则拖拉报表模板进去,然后拖动维度和度量到模板中,加载数据就可以实现报表的数据显示了,如下所示:
先总结写到这里,有心得再继续记录了。