漫谈大数据仓库与挖掘系统--层次、维度与主题

来源:互联网 发布:黑暗之魂3画面设置优化 编辑:程序博客网 时间:2024/05/22 06:08

2013-10-09阿里技术嘉年华

    上集回顾:什么是大数据?【回复071查看】

 

    在上一章节的末尾,我们谈到,这个系列的文章,最终会以我国公安机关拥有的公民信息、加上民航部门拥有的出行信息、银行拥有的交易信息等数据为例,逐渐讲述如何构建一个大数据的国民信息挖掘系统。不过以上一章节所叙述的基础知识,还不足以让我们进入实例环节。在这一章,我们还是必须补充一些相关的基础知识。 


    当然本文作为一个科普性质的读物,笔者并不希望读者们对本文望而生畏,所以,即便是对基础知识的介绍,本章节也不会参杂多少深奥的理论知识。而且事实上,数据仓库与数据挖掘的相关技术和理论,大多都是从工程师们的实践中总结出来的,而不是由大学中的教授们研究出来的。不过,为了解释数据仓库到底是什么,它和我们所熟知的数据库系统有什么不同,笔者还是要引用现代数据仓库之父,William H.Inmon大师的著作:《数据仓库(Building the Data Warehouse)》中的一个定义:

    “数据仓库是:面向主题的、集成的、稳定的、面向时间的数据集合。” 

    一句简单的话,阐述了数据仓库系统的至少一半以上的任务。面向主题的、集成的、稳定的、面向时间的,这四个形容词中,最好理解的,便是面向时间的。以民航部门拥有的出行信息为例,每一天出行的旅客、目的地等信息都是不同的,这样的记录的时间性,在航空公司的业务数据库中,可能仅仅是每条记录中的一个记录时间(年月日时分秒或者其它的什么形式)的字段,但是在数据仓库中,则是不然。数据仓库中,时间是一切数据的分类的第一方法。所有的类别、来源的数据,若是在一个时间段内产生(通常以天或周为单位),都会用相同的方法做分类。分类的方式可能是表,也可能是Hive等系统中某表中的一个分区,显然目前后者是更加常用的。所以,数据仓库中往往拥有业务数据库中的数据在时间周期内的变化的全部历史。例如我国全部航班的总的起飞数量这一数据,在业务数据库中,很可能只存储了最新的数据,但是在数据仓库中,由于每日(或周或小时)都将业务数据库的数据装入数据仓库的一个周期分类中,所以,却是能够查找到每个时间周期的全部历史数据的。

    集成这个特性也是很好理解的,在业务数据库系统中,不同的业务系统往往使用不同类型和位置的数据库,但是在数据仓库系统中,无论何种数据源,无论是access、sql server、mysql还是oracle,甚至是系统访问日志中的数据,都会被统一装入同一个数据仓库系统,这便是数据仓库系统的集成性了。这里,我们把装入数据仓库系统之前数据所在的位置叫做数据源,数据源可以是异构的,也就是说可以是任何形态存储的,甚至是人工录入的。稳定这个特性,则指的是数据仓库中的数据,一旦从数据源中存入,便不会再进行任何变化,只会在此基础上进行进一步的分析处理。 

    我们已经了解了数据仓库的四个特性中的三个,但是排在第一位的,最重要的“面向主题的”,却是比较难以理解的。很难用一两句定义来解释其中主题二字的含义。那么我们便只能以一个例子来说明:还是以航空公司为例,在航空公司的业务中,更受关注的往往是你乘坐的航班的编号、你选用的航空公司、你登机的时间等等,在前台业务中,被查询最多的,也便是这些信息。但是在数据仓库中,这些信息的重要性往往不如作为主体的你更加重要。航空公司们往往希望通过挖掘每个人的行为特征,来更加精准的为客户提供服务和推送广告,这里,客户,或者说人,便是一个主题了。所以读者们可以先笼统的认为,主题是数据分类的方法。 

    说完了数据仓库的的定义,让我们来看一看数据仓库中数据的层级结构。上一个章节中所述的离线计算、流数据计算以及实时计算的分类,指的是数据处理系统的分类,这里的层级结构,则指的是数据的组织形式。在这个方面,各种著作中的说法不一,但是从我集团数据平台的实践出发,笔者在这里将数据仓库的数据分为三个层面来叙述:数据运营层(ODS)、数据仓库层(DW)和数据产品层(Product)。 

    数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。例如这一层可能包含的数据表为:人口表(包含每个人的身份证号、姓名、住址等)、机场登机记录(包含乘机人身份证号、航班号、乘机日期、起飞城市等)、银联的刷卡信息表(包含银行卡号、刷卡地点、刷卡时间、刷卡金额等)、银行账户表(包含银行卡号、持卡人身份证号等)等等一系列原始的业务数据。这里我们可以看到,这一层面的数据还具有鲜明的业务数据库的特征,甚至还具有一定的关系数据库中的数据范式的组织形式。但是,这一层面的数据却不等同于原始数据。在源数据装入这一层时,要进行诸如去噪(例如去掉明显偏离正常水平的银行刷卡信息)、去重(例如银行账户信息、公安局人口信息中均含有人的姓名,但是只保留一份即可)、提脏(例如有的人的银行卡被盗刷,在十分钟内同时有两笔分别在中国和日本的刷卡信息,这便是脏数据)、业务提取、单位统一、砍字段(例如用于支撑前端系统工作,但是在数据挖掘中不需要的字段)、业务判别等多项工作。 

    数据仓库层(DW),是数据仓库的主体,在这里,从ODS层中获得的数据按照主题建立各种数据模型。例如以研究人的旅游消费为主题的数据集中,便可以结合航空公司的登机出行信息,以及银联系统的刷卡记录,进行结合分析,产生数据集。在这里,我们需要了解四个概念:维(dimension)、事实(Fact)、指标(Index)和粒度( Granularity)。 

    事实(Fact)数据是一切数据的基础,是针对某一特定事件的度量。以上一段中研究人的旅游消费为主题的数据集为例,这个数据集中的主体的事实数据,便是人在出行到目的地之后,在目的地城市的刷卡消费信息,这一数据由业务发生的事实产生,所以叫做事实数据。维(dimension)则是事实数据的其中一个侧面,例如人的旅行的目的地,则便是旅行消费信息的一个维度。 

    再举一个更加确切的例子,在淘宝网(天猫)中,我们以交易为主题建立一个数据集,那么每一笔交易的信息便构成一个事实表,每一个交易可能有几十个维度,例如商品的类目、卖家、买家、品牌等等。将全部的商品类目提取出来构成一张表,那么这张表便是这个数据集的一个维度表。在大型数据仓库中,维度表往往非常复杂。例如在淘宝(天猫)中,仅类目一个维度,便包含八十余个一级类目(行业类目)、成千上万个二三四级类目、以及最底层的叶子类目等信息,各个类目之间还存在着树状的关联,有的一级类目便同时是叶子类目(例如手机类目)。这些维度信息构成了庞大的围绕着事实数据的维度表系统。 

    粒度(Granularity)则表示数据仓库中数据集的精细程度。粒度越高,则数据的细节越多。例如在低粒度的数据表中,会包含一个人在任何城市中的每一条的刷卡记录,而在高粒度表中,则可能只包含一个人在各个城市中的刷卡总金额。这便是粒度不同的体现。这么做,是因为大多数的分析挖掘往往仅关注低维度的数据集合,那么使用高维度的数据集进行输入便会大规模的浪费系统资源。至于指标(Index),在笔者的理解中,则是相对于维度的一个概念,是数据集中不会按照维度进行筛选的数据,例如刷卡成交金额等。 

    在数据仓库层中,数据按照主题组织,按照不同的事实、维度进行组合和关联分析,构成了数据仓库中主体的数据。而最后一层数据产品层,则是数据仓库中的最上层。数据产品层使用DW层的数据集,针对要输出的产品不同,而进行不同的数据开发组合,最终输入给数据产品的数据库或实时计算系统中。例如一个分析每个城市的旅游人员的刷卡金额的数据产品,则可以在这一层中进行按照城市维度的各大银行刷卡信息的汇总的数据计算。 

    看了这么多基本理论,相信读者们也开始头昏脑涨了。不过没关系,从下一章开始,我们便会面对构建我们国民信息挖掘系统中的第一个超级技术难题:数据抽取系统的构建。 


--

微信名称:阿里技术嘉年华

微信号:alibabatech

简介:传播原创高质量的技术内容

原创粉丝点击