作者·2011-08-25 10:51
·

数据仓库建设经验(转)

字数 8894阅读 1627评论 0赞 1

看到一篇很好的介绍数据仓库的建设的文章,果断的转

       数据仓库的建设是一个巨大的工程,按照仓库的理论思想和我自己实际的仓库建设过程,我觉得数据仓库最好分为六层的设计思想来构建和实施:
一 ,源数据层
       源数据层的目的是为数据仓库提供数据来源,它的数据来自于仓库外部,如企业各应用系统,各部门的源数据,企业的外围数据,如行业标准等。这些数据的特点是:
        1,它们是动态的,数据可能随时间变化。
        2,它们是面向应用,面向业务的。
        3,它们是明细的,数据粒度是最低的。
        4,它们是固定的,在仓库建设过程中,不允许干系人更改它们。
        5,它们是形式多样化的,可能以多种新式出现(如file, db table, dataset, xml, sap, xls等)。
        6,它们的物理位置的多样性,数据可能在一台机器上,也可能在一个局域网类,也可能在internet上。
        7,它们生成的多样性,我们可能每天都到一个固定的地方获取它们,也可能是临时的,跟政策相关的,经协商后产生并提供给仓库用的。
        源数据层中数据的生命周期:在数据仓库建设过程中,我们只要向它们取数就行,不用考虑其生命周期。
        在数据从本层到ODS层加工的过程中,我想强调的有一下几点:
       1,etl工具的使用:
        具体情况具体对待,如果源数据层的构成比较简单,数据量也比较少,加工的时间窗口充足,则为了节省成本,可以用一些免费的工具,或者自己开发工具。如果构成比较复杂,数据量也很大,为了保证加工的时间窗口,在资金充足的情况下,建议使用datastage,informatic之类的工具,因为它们在异构数据环境下的数据搬运能力不容小觑。
       2, 工作内容分析:
         本阶段的工作是ETL的E部分,即数据的抽取。当然也包括部分为了更好的抽取而进行的必要数据清洗过程。这部分的工作量依赖于源数据层的构成,源数据层中数据的规整程度以及数据量的大小。如果源数据层构成比较复杂,再加上它数据的规整程度很低,数据量又很大,则本层的工作量是相当的大。否则,则工作量如其它各层的相当。
         举例说明,在某银行的数据仓库建设过程中,一个19GB的数据文件入库时报错,经漫长的分析后,发现是数据中的某个中文汉字的编码中包含了作为分隔符的‘|’。再如某银行的数据仓库建设过程中发现,某上级单位下发的非开放式标准的xml类型的数据,需要经过单独开发工具加工处理后才能入ODS层的库。

二,ODS层
        数据从源数据层经过简单的清洗后,或者不经过清洗直接搬运后就到了ODS。
        ODS层的功能是:
               1,为S_DW层提供数据
               2,为查询分析层提供明细数据查询
               3, 隔离了分析系统与业务系统,保证了业务系统的安全性,减轻了业务系统的压力。
        ODS层数据的特点是:
                1,数据内容与源数据层完全一样或基本一致。
                2,数据是明细的,粒度最低的。
                3,数据是面向主题存储的。
                4,数据是反映历史变化的
                5,数据是稳定的。
         ODS层数据的生命周期: 一天
         数据从ODS层加工到S_DW层过程中:
        1,etl工具的使用:
               建议用procedure,function,UDF等来完成。
               1,优点是:效率高,软件费用低,无需额外第三方etl工具的技术支持。
               2, 缺点是:不便于开发,维护;调度,运行的可监控性较差。
       2,工作内容分析:
             本阶段的目的是清洗,整合,加工数据。对应于ETL的T,即加工。由于ODS层的每个表数据量都相对较小,故本层中适合做加工处理,多表的关联等。在建好模型的基础上,本部分的开发工作量不是太大。本层的数据依赖于源数据层的数据,而且加工处理较多。故数据加工时间可能比较大。

三,S_DW层
         ODS层的数据经过清洗,加工,整合后就到了S_DW层,S_DW层其实是从ODS层分解出来的,它是ODS层和DW层之间的一个中间层,它不是必须的,如果数据仓库比较大,比较复杂,那么建议使用本层,以提高效率。本层的存在相当于用空间来交换时间。
         S_DW 层的功能是:它为数据从ODS层到DW层提供了一个缓冲,相当于一个临时空间,节省了FACT表和DIM表生成的时间。
         S_DW 层数据的特点:
               1,数据的规整程度较高。
               2,数据的粒度较低。
               3,数据是面向主题的。
               4,数据是反映历史变化的。
               5,数据是稳定的。
         S_DW 层数据的生命周期: 一天
         数据从S_DW层加工到DW层过程中:
              1,ETL工具的使用:
                     同ODS层。
              2,工作内容分析:
                     本阶段的目的是把整合后的业务数据表加工成符合入仓库规则的FACT表和DIM表。然后数据以FACT表和DIM表的形式入仓库。对应于ETL过程的L,即入仓库。在建好模型的基础上,本部分的开发工作量不是太大。本层的数据依赖于ODS层的数据,加工处理,整合较少。故数据加工时间也较少。

四,DW层
         当FACT表,DIM表生成后,就可以利用它们按照主题来建CUBE了。CUBE建成后,数据仓库就基本建成了。后继所需的工作就是每天(增量或全量)刷新CUBE,或者按照需求往仓库中新增主题,新增CUBE来充实仓库了。
        DW层的功能是:为后继的基于仓库的应用提供基础。
        DW层数据的特点:
                1,面向主题
                2,稳定的
                3,反映历史变化的。
                4,集成的。
         DW层数据的生命周期: 仓库的数据规划保留期。
         数据仓库中的cube加工注意事项:
                CUBE的刷新方式:最好使用日增量方式,不然时间会特别慢。CUBE的模型也特别影响CUBE的刷新时间,当CUBE的模型发生变化时,CUBE必须要全量刷新。另外有个细节问题须强调的是,在纬度表中,要有条“未知”记录来描述一些不太规整的事实。

五,查询分析层
         就我接触的,知道的,基于仓库的应用:
        1,多维分析层
                经营统计分析,风险分析,绩效考核,客户分析,产品分析等。
                它们向cube取数 。
        2,二维报表层
                提供上级部门必须的报表,如银监局,人行,外管局所必须的报表。
                它们可以从dw层取数
        3,信息查询层
               比如某些特殊的报表,需要知道最n的m条记录的信息,例如想知道今天交易的最大的10比贷款的客户资料。
              准确的说,他们应该是从dw或s_dw,或ods层取数据。
          4,数据挖掘层
              我没有具体做过挖掘,仅仅是知道他们是基于仓库的应用而已。
六,应用层
              经过前面的建设,我们就可以从信息系统获取信息了。但是经过对DW中信息的分析得出了某些知识后,我们怎么样去使用这些知识呢? 这就是DW信息系统建设的目的和意义所在。
             我参与建设的银行信息系统中,较少有涉及到这一层的。下面就以我个人的理解来做表述。
             1,应用层体现了基于DW的信息系统建设的目的。
              譬如说,我们用多维分析能够分析出什么样的结论?这些结论能够帮我们解决什么样的问题?我们是否在用这些结论在解决这些问题?数据挖掘挖掘出来的知识的正确性有多大?可用程度有多大?它是否在为决策支持等提供服务?信息查询中查询处的信息,我们是怎样在用它们呢?等等。 总之这些信息,知识,结论是否能够在节省成本,增加利润,提高绩效,规避或降低风险,优化企业业务结构,组织结构,客户构成等方面发挥作用呢?
            2,应用层应为企业发展的战略,战术目标以及领导决策提供支持服务。
               譬如说,经营统计分析告诉了我们企业利润的组成及发展趋势。产品分析告诉了我们,客户分析告诉我们。风险分析告诉我们
              通过种种分析方法,我们可以知道 ,企业应该通过开发什么样属性的产品来吸引什么样的客户,以以最小的风险来谋取最大的利润。
              风险分析分析结论的使用是否真正的了规避了风险?绩效考核是否找到绩效低下的原因,是否可以找到提高绩效的方法?
            3,应用层应为应用,业务系统提供服务。
             譬如说,在银行业务中,通过查询分析,我们知道了某客户是当月存款最大的客户,那么当此客户到银行来办理业务的时候,应用层程序就应该告诉客户经理可以为该客户提供的产品。


总结:
          从上面的描述中可以看出,DW的建设是一个长期的连续的过程。它是由业务驱动的,也应该是驱动业务的,而后者在银行中的应用体现却不是很充分。


思考:
           新应用,新业务,新产品产生后,仓库要做哪些变化。
           怎样才能使仓库的可扩展性强,怎样使仓库的架构稳固。
           怎样使仓库随着应用数据量的增大,应用数的增多,而效率变化不大。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广