我们需要什么样的数据仓库

时至今日,我们都已经意识到大数据时代的来临。数据对公司的重要性得到普遍的认同。这些年来,各个行业的公司,包括互联网、金融、汽车、贸易等,内部都设立了专门的大数据部门,地位也越来越重要,甚至专门的大数据公司也遍地开花。不管在什么行业,大家都希望能够通过获得数据,了解自己的用户以及用户对自己产品的评价。

我们知道了数据是有价值的,那数据价格该如何体现。在这篇文章中,答案是通过数据仓库。现在,即使是刚刚接触大数据的同学们,也都知道了数据仓库这个名字,并且对数据仓库的作用有一定的认识。可能会把数据仓库的存在的当成是理所当然的事情。而这篇文章的目的,就是希望去重新思考这个问题,让我们理解为什么需要数据仓库,并且试图说明白如何评价一个数据仓库是不是好的、有效的。

1. 数据中信息的价值

很多人会提到一个说法,数据是公司的命脉。在一般的场景下,这句话无疑是正确的。但是,这个正确并不是自然而然得到的结果,如果不能从数据中提取出合理的、全面的信息,数据也有可能一无是处。例如,我们从过往客户信息中去预测潜在客户的特征,如果得到的结果里面一半是对的,一半很可能是错的,并且没法完全确定哪些特征是错误的,那么很难说数据带来了价值。

可能导致从数据中得不到有价值信息的原因有很多。在数据仓库和商业智能的概念兴起之前,人们可能还分不清操作数据或者说事务数据跟用于分析的数据之间的区别。在分析订单情况的时候,人们会直接在订单表上查询,或者更进一步,为了防止这些分析影响到订单系统的性能,在数据库备份上进行分析。假设要分析一周的客户订单信息,分析人员会遇到的问题包括:现在查到的某条订单信息跟一周前还一样吗;某一类订单是否应该被排除到分析之外;客户的性别信息以哪里为准等等。不同的人可能会有不同的答案。导致的最严重的后果就是,不同的人在不同的时间,分析结果是不一样的,甚至得到的结论是相反的。

在技术实现层面,这样的数据使用方式还有可能让订单系统的设计方向要在简洁可靠和分析需求之间做一些妥协。

好在经过前人的摸爬滚打,在我们常说的“大数据时代”来临之前,就提出的数据仓库的概念,并且基本发展成熟。

从名字上看,数据仓库的功能是对数据的存储和管理。但是在我来看,数据仓库的核心价值是从数据中提取信息,真正的让数据变成公司的财富。从数据仓库的视角来看,数据在产生后是杂乱无章的,包含了优质的、劣质的、真的、假的信息等待去挖掘,去发挥价值。数据仓库把这些数据收容进来,经过一次或者多次的ETL过程,把优质的信息呈现出来。

整个过程可以简单类比黄金的生产和销售过程。我们把源数据比作金矿,把带有优质信息的数据比作黄金制成品,把信息给公司带来的收益比作黄金制成品销售获得了收益。这里提到了两个步骤,第一个是从数据中提取有价值信息,或者说把金矿转化为黄金制品;第二个是通过数据获得收益,或者说销售黄金或者收益。其中,第一个步骤是数据仓库承担的功能,而第二个步骤是数据仓库需要存在的原因,这一点要牢记。

第一步的“金矿到黄金制品”的过程,细化下来也分几个阶段。第一个阶段是数据的获取(开采),主要的来源有业务数据库、nginx操作日志等。第二个阶段是数据清洗(清洗和精选),主要去除一些明显的异常数据和无效数据。第三个阶段是明细数据建模(冶金,从矿物中提取出黄金);第四个阶段是生成汇总数据(设计和加工成首饰)。这四个阶段应该是由数据仓库面向整个公司集中式的完成。

数据仓库之上的数据应用可以看做是黄金商店。商店自己不需要去开采或者冶金,只提供两个层级的服务,销售制成品黄金首饰(读取汇总数据),或者接受首饰的定制化设计和制作服务(直接分析明细数据)。当然第二种服务需要花的时间长一些,也要付出更多的代价。

回到上面提到的直接到源数据中分析的例子,就好像是每次黄金首饰商店有客户到来之后,都要从冶金或者是清洗开始制作过程,自然质量无法得到保证,并且会带来大量的无谓消耗。

2. 数据仓库的目标

那么怎样才是是好的数据仓库。Inmon在他的数据仓库书中下的定义是,数据仓库是一个面向主题的、集成的、非易失的、随时间变化的用来支持管理人员决策的数据集合。数据仓库包含粒度话的企业数据。数据仓库中的数据可以用于很多不同的目的,包括为我们现在不知道的未来需求做准备。

我把数据仓库的目标分为两类,分别是方便数据获取和提升数据中信息的价值。其中方便数据获取的目标包括:

  • 方便数据存取
  • 以一致的形式展现信息
  • 结构必须适应变化
  • 数据更新及时

提升数据数据中信息的价值的目标包括:

  • 必须成为提高决策制定能力的权威和可信基础
  • 必须被业务群体所普遍接受

3. 数据仓库设计者应该要注意什么

从之前的经验中,我认为在设计数据仓库的时候最重要的点有如下两个。这几个想法在前人的书中都有过提及,但是因为他们的重要程度,需要着重说明。

3.1. 面向业务,自顶向下

数据仓库的设计者需要同时有两个角度的思维,分别是数据的管理者和数据分析师。作为数据工程师或者数据产品经理,很自然的会关注于我们有哪些数据,用这些数据可以得到什么信息,该怎么处理这些数据才能拿到这些信息等等作为数据管理者角度的问题。会更加关注数据的处理逻辑、使用方法以及深入到各个数据字段的含义。

而很容易忽略的一个问题是:基于公司的业务,我们的数据应该能够回答什么问题。这是一个决策者或者数据分析师的思考角度,是一个自上往下,面向业务的思维过程。关于这点我认为,数据仓库如果出现了重要信息的缺失,是数据仓库设计者很大的失职。当然在实践过程中,这是一个需要多个部门配合才能完成的事情。但是对数据仓库系统来说,这是提升权威性和可信度,以及被业务群体接受的必须步骤,是需要努力的方向。

3.2. 集成性和一致性,要面向整个公司

一致性的目标是数据仓库的基础,也是实现数据仓库其他目标的前提。有些时候,公司可能会选用独立数据集市的方式来构建分析决策系统。独立数据集市架构就是以各个部门或者业务为独立的主题,各自从原始数据中获取和处理数据,生成需要的数据指标。随着业务的发展,各个单独的数据集市之间可能会共享一些信息,变成联邦式的数据集市架构。初期来看,这种形式可能会提高开发的速度,快速得到结论,并且有定制的灵活性。但是长期来看,会带来很大的问题。

独立式数据集市虽然比直接从源数据获得信息更近一步,有了ETL的过程,区分了操作型数据和分析型数据,但是仍然有一些问题没有解决。例如数据的大量冗余。更严重的是,因为没有从公司的整体考虑,会产生多种不同的解决方案,后期要再达成一致,需要付出很大的代价。