搭建数据仓库第02篇:数据仓库技术架构解决⽅案
上⼀篇开了个头,从Kimball数据仓库⽣命周期⽅法⾓度,列出了数据仓库搭建的核⼼步骤,从这⼀篇开始将讲述技术路径:技术架构设计和产品选择和安装。
⾸先先以某公司的数据仓库的总体架构图的视⾓,了解整个数据仓库搭建起来后结构⼤体的样⼦。
1. 最底层是数据源,⼀般是在线的数据库或者是⽂件系统。对于在线数据库,⼀般是操作型数据库,⽐如mysql,oracle等,⼀般是存在主库和从库,从库⽤来做备份,主库出现问题时切换到从库,从⽽尽可能的避免影响线上的应⽤,从库的数据是从主库使⽤⼯具同步过来的,⽐如oracle的shareplex等,所以从库有⼀定的延迟。⽂件系统⼀般使⽤的格式是csv或者txt。不推荐excle格式的⽂件,容易出现格式问题。2. 数据仓库层包含ODS,EDW,DM,接⼝数据,归档数据以及调度监控,元数据管理,主数据管理和数据质量监控
ODS层是从数据源抽取(E),经过格式的转换(T),最后加载(L)到数据仓库中的。
ETL过程中数据的粒度不会变化,⼀般除了简单的格式变化,跟线上的数据库的表基本⼀致。抽取是对从库的表的数据进⾏抽取,抽取的时候需要对主从库是否存在延迟进⾏监测。
有的时候是加载操作在转换操作之前,也就是ELT,这取决于转换操作在数据仓库中是否更加容易操作,在⼀般的TB、PB的数据仓库中,数据的转换函数并不是很丰富,即便是有,有时候性能也不是很好,所以都是在抽取数据到⽂件之后,对⽂件进⾏转换操作处理。
抽取的时候⼀般可以选择增量抽取还是全量抽取,增量抽取⼀般需要根据时间戳,全量抽取的时候可以通过ROW NUM字段进⾏批量式的抽取。
加载的⽬标表可以是临时表staging table,全量ODS表,分区ODS表。加载到临时表⼀般是针对增量抽取⽽⾔的,通过将增量数据全部load到临时表之后,通过merge操作更新ODS表。加载到全量ODS表,如果是增量抽取,那么就⽤新增数据merge历史全量数据,此时确保没有应删除操作;如果是全量抽取,那么直接⽤新抽取的数据覆盖历史数据。 分区ODS表分为增量分区(每个分区是增量数据)和全量分区(每个分区是历史全量数据),增量分区表可以选择增量抽取,全量分区,在没有硬删除的时候可以采⽤增量抽取,然后merge前⼀个分区的数据⽣成最新的分区,有硬删除的情况下只能采⽤全量抽取,然后直接⽣成最新的分区。EDW层是将ODS层的数据按照主题来⽣成基础数据。EDW之上的是DM层。针对特殊的APP应⽤或者部门等,可以通过EDW的数据⽣成接⼝数据,专门服务于应⽤软件等。
任务调度,从数据源—>ODS—>EDW—>DM/接⼝层的数据流的计算都需要使⽤⼯具或者编写脚本来执⾏,执⾏的过程需要调度系统来安排,过程中需要管理任务的执⾏频率,优先级,任务的依赖,以及任务运⾏时的监控(失败或者延迟)等等。元数据和主数据的管理,这⼀块是⽐较难于管理的部分。数据质量监控
3. 数据应⽤层主要是数据的分析、挖掘和展⽰。
系统⾓度上,影响建设数据仓库的解决⽅案的因素
操作出现的频率,即业务部门每隔多长时间做⼀次查询分析。在系统中需要保存多久的数据,是⼀年、两年还是五年、⼗年。
⽤户查询数据的主要⽅式,如在时间维度上是按照⾃然年,还是财政年。⽤户所能接受的响应时间是多长、是⼏秒钟,还是⼏⼩时。
产品选择⾓度上,影响建设数据仓库的解决⽅案的因素
⼚商的背景和⽀持能⼒,能否提供全⽅位的技术⽀持和咨询服务。数据库对⼤数据量(TB级)的⽀持能⼒。数据库是否⽀持并⾏操作。
能否提供数据仓库的建模⼯具,是否⽀持对元数据的管理。能否提供⽀持⼤数据量的数据加载、转换、传输⼯具(ETT)。
能否提供完整的决策⽀持⼯具集,满⾜数据仓库中各类⽤户的需要。
在了解了整个数据仓库⾃上⽽下的框架之后,数据的同步,数据的存储计算,数据的计算,数据的分析,数据的展现,这些阶段上建设数据仓库有什么样的解决⽅案呢?
⾸先是数据同步(数据源-ODS层):ETL⼯具的选择
主流的ETL⼯具有Informatica,Datastage,Kettle
(借此吐槽⼀下博客园表格的使⽤太不和谐了,做好的表格,整篇⽂章格式全乱了! 只能做好截个图)其他的ETL⼯具有ODI,Beenload,Cognos等等其次是数据的存储计算(EDW-DM):数据仓库
数据仓库主流有Teradata,Exadata,GreenPlum,SybaseIQ,Hive
数据的分析和报表展⽰:OLAP
5⼤主流BI⼯具
参考http://www.cnblogs.com/cold/archive/2011/10/18/2216272.html