之前的文章——网站数据分析的一些问题2中主要整理了BI相关的问题,这篇文章主要想整理一些数据仓库相关的问题。因为最近重新在看一些数据仓库的资料和书籍,想把之前以及当前遇到的主要问题提出来(博客中有关数据仓库的相关内容请参阅网站数据仓库这个目录),同时自己也对数据仓库方面的知识进行下重新的整理和认识,而且很久没有在博客发新的文章了,不能让自己过于懒散了。
之前看过Inmon的《构建数据仓库》和《DW 2.0》,而另外一位数据仓库大师Kimball的《数据仓库生命周期工具箱》一直没有时间阅读,最近才有时间看完了大部分,就迫不及待想写点东西了。其实数据仓库领域普遍认为Inmon和Kimball的理论是对立的,两者在构建数据仓库上方向性的差异一直争论不休,谁也无法说服谁到底哪种方法更好。我的Evernote的笔记里面不知什么时候从哪里摘录过来了对两者观点的概括性描述,非常简洁明了而一针见血:
Inmon vs Kimball
Kimball – Let everybody build what they want when they want it, we’ll integrate it all when and if we need to. (BOTTOM-UP APPROACH)Pros: fast to build, quick ROI, nimble
Cons: harder to maintain as an enterprise resource, often redundant, often difficult to integrate data marts
Inmon – Don’t do anything until you’ve designed everything. (TOP-DOWN APPROACH)
Pros: easy to maitain, tightly integrated
Cons: takes way too long to deliver first projects, rigid
其实看了《数据仓库生命周期工具箱》之后,发现两者的观点没有那么大的本质性差异,可能随着数据仓库的不断发展,两者在整体的架构上慢慢趋同。基本上,构建统一的企业级数据仓库的方向是一致的,而Inmon偏向于从底层的数据集成出发,而Kimball则趋向于从上层的需求角度出发,这可能跟两者从事的项目和所处的位置有关。
有了上面这段高质量的概括,第一个问题——你更偏向于以何种方式搭建数据仓库(BOTTOM-UP or TOP-DOWN),分别有什么优劣势?——其实就不用问了,所以下面主要提几个在实际中可能经常遇到或者需要想清楚的问题:
Q1、数据仓库的技术解决方案有哪些,这些解决方案的优势在哪,瓶颈在哪?
随着数据仓库的不断发展和成熟,“大数据”概念的风靡,有越来越多的相关产品出来,最常见的技术解决方案包括hadoop和hive,oracle,mysql的infobright,greenplum及nosql,或者多个结合使用。
其实归纳起来就两类:一是用传统RDBMS为主导的数据库管理数据,oracle、mysql等都是基于传统的关系型数据库,优势就是有更严谨的数据结构,关系型数据库对数据的管理更加规范,数据处理过程中可能出现的非人为误差极小,而且标准的SQL接口使数据获取的成本较低,数据的查询和获取更加灵活和高效;但劣势也很明显,对海量数据的处理和存储的能力不足,当数据量达到一定程度的时候就会出现明显的瓶颈。而是基于文本的分布式处理引擎,hadoop、greenplum和nosql都是基于文本数据的处理和存储,优势是强大的数据处理能力,分布式的架构支持并行计算,并且具备超强的扩展延伸能力;劣势就是上层接口不方便,因此Hadoop上层的hive和greenplum上层的postgreSQL都是为了解决数据接口的问题,并且数据的查询和获取很难做到实时响应,灵活性不足。
Q2、数据仓库是否就应该保存聚合数据,细节数据不应该放入数据仓库?
其实这个问题基本已经达成共识,如果是构建企业级的数据仓库,那么对细节数据的集成和存储是必不可少的,但现实中还是存在很多直接从外部数据源计算聚合之后导入数据仓库的实例。如果对数据仓库只是轻量级的应用,仅存放聚合数据也无可厚非,毕竟没人规定数据仓库一定要是怎么样的,最终的目的无非就是满足对数据的支持和需求。
但对于企业的长期发展来看,数据仓库中存放细节数据有两方面的好处:一方面从技术层面,数据仓库存储细节数据可以释放前台数据库的查询压力,同时对于文本类数据和外部文档类数据入库之后管理更加规范,数据仓库保留历史和不可变更的特性可以让信息不被丢失;另一方面就是从数据的使用上,数据仓库让数据的获取和使用更加简便,集成细节数据让大量的文本型数据可查询,可关联,而面向主题的设计让数据的展现和分析更有方向性和目的性,而且细节数据是支持数据分析和数据挖掘应用所必不可少的。所以,如果数据仓库要不断地催生出更大的价值,细节数据的存储是必不可少的。
Q3、你会把数据仓库分为几层,每层的数据作用是什么?
没有标准答案,根据数据仓库中数据的复杂性和对数据使用的需求程度,数据仓库可以有不用的层级划分。
我一般会把数据仓库划成三层:最底层的细节数据,管理策略是优化存储,一般存储导入的原始数据,便于进行向上的统计汇总,因为数据量较大所以需要优化存储;中间层是多维模型,管理策略是优化结构和查询,面向主题的多维模型的设计,需要满足OLAP和数据查询的多样需求,同时保证查询的便捷性,关键在与维表的设计和维度的选择及组合,事实表需要关注存储和索引的优化;最上层是展现数据,管理策略是优化效率,一般会存放每天需要展现的汇总报表,或者根据多维模型拼装的视图,展现层的数据需要以最快的速度展现出来,一般用于BI平台的Dashboard和报表。
Q4、数据仓库搭建中最繁杂的事情是什么,最容易缺失的是哪一块?
一直觉得数据仓库的核心不在于数据集成,当然数据集成是数据仓库实现价值的前提,数据仓库真正的价值体现在数据的有效应用,数据源于业务反作用于业务。而搭建数据仓库的核心在于数据仓库的架构和数据模型的设计,怎么权衡数据的存储和数据获取效率之间的矛盾是数据仓库管理上的难点,这个难点任何数据仓库都会存在,而大数据增大了这种权衡中的难度。而数据的集成和数据质量控制是数据仓库搭建中最繁杂的事情,尤其是数据清洗的过程,我之前也写过几篇数据质量控制的文章,但现实中这个过程还要复杂得多,而且为了上层数据产出的准确性和有效性,这项工作又不得不做,而且要做得尽量细致。
搭建数据仓库中最容易缺失的就是对元数据的管理,很少有数据仓库团队具备完整的元数据,当然搭建数据仓库的工程师本身就是活的元数据,但无论是为了用数据的人还是数据仓库自身的团队着想,元数据都不可或缺。一方面元数据为数据需求方提供了完整的数据仓库使用文档,帮助他们能自主地快速获取数据,另一方面数据仓库团队成员可以从日常的数据解释中解脱出来,无论是对后期的不断迭代更新和维护还是培训新的员工,都非常有好处,元数据可以让数据仓库的应用和维护更加高效。
写在最后:以上仅代表个人观点,欢迎大家踊跃拍砖,更加希望高手们能在评论中给出宝贵的答案,任何角度的观点和讨论都可以,集思广益。
我是做物流的,打算改行做数据分析。
数据需求沟通、数据清洗、数据质量验证是数据仓库构建中非常重要,但是容易别忽视的环节。又因为其“吃力不讨好”,被人主动放弃。现在国内的数据氛围还是比较浮躁。
Pingback 引用通告: 网站数据分析的一些问题(三) | 钛媒体网
Pingback 引用通告: 网站数据分析的一些问题(三)
Pingback 引用通告: 网站数据分析的一些问题(三) | 极客互联|关注极客事业
Pingback 引用通告: 网站分析新手入门——学习渠道汇总 | 林魔王的互联网笔记
Pingback 引用通告: 网站数据分析的一些问题(三) | 内容采集