您现在的位置是:首页 > IT基础架构 > 软件与服务 >

数据仓库中时间属性的研究

2009-10-20 19:11:00作者: 来源:

摘要在基于数据仓库的CRM系统中,时态数据的更新与删除处理是一直倍受关注的问题之一,本文主要探讨了数据仓岸中时间属性的变化处理方案,为数据仓库维表的时态数据的更新变化处理提供了依据。 ...

    随着计算机技术的发展以及对大量历史数据分析的需求,数据仓库(Data Warehouse)技术应运而生。数据仓库将联机分析处理(OLAP)从传统的联机事务处理系统(OLTP)的数据库解放出来,从而使日常的事务处理与数据分析分别处于不同的数据平台,大大提高了对数据分析事务的支持。同时随着CRM(Customer Relationship Management客户关系管理)的发展,为数据仓库提供了广阔的应用,由于CRM系统主要是基于大量的“历史”数据的分析,对时间属性的处理越来越受到人们的关注。

1 数据仓库概述

    根据数据仓库之父Inmon W H对数据仓库的定义:“数据仓库是面向主题的、集成的、随时间变化的,但信息本身相对稳定的数据集合,用以支持管理决策过程。”即数据仓库具有面向主题、集成、时变、相对稳定四个特征,并以此作为与传统事务处理数据库的区别。

    目前的数据仓库一般都是基于星型、雪花型和星座型模型。其中星型模型是基本模型,其它模型均是星型模型的扩展。

    星型模型的结构见图表1,其中间为一个事实表,四周的维表通过关键字与事实表相关联。在模型中,位于星形图中心的实体是行为实体(也有人称其为指标实体),是用户最关心的基本实体和查询活动的中心,为用户的商务活动提供分析用的相关量化数据。位于星形图四周的实体是维表实体,为分析处理提供分析的维度、层次等数据。


图表1 星型模型结构图


2 时间属性

    在传统的面向事务处理的系统中,我们往往将实体间的联系看作是静止的,忽略了实体间的时间特性。如在事务处理中,一个客户信息的更新,往往只是简单地将该客户在数据库中的信息进行更新等等。而在数据仓库中,除了含有一个与事实表同步更新的时间维(时间实体)外,其他维表往往也含有关于时间的属性。

    例如,图表2表示一个数据仓库中的事实表与一个维表的逻辑结构,其中维表与事实表之间是一对多的关系。更新维表实体,可以采取以下方式:


图表2 客户潜力分析

    2.1 直接更新维表中的原记录

    该更新方式是直接用字段的新值替换旧值,不保留以前的字段值。从实现角度看,此方式简单,实现容易。例如在我们分析客户潜力主题时,维表中客户姓名属性对企业的分析基本没有什么大的影响,这时对客户姓名的更新,我们可以采取这种直接更新的办法。

    不过,在另一方面,由于它对行为不提供时间的支持,在这种更新方式下,可能会得到错误的分析结果。例如当图表2中某客户的家庭收人情况数据由“高”变为“低”时,在该客户记录中直接使用新值替换旧值时,在做如下查询时,就会出错。

    Select 客户姓名,消费金额
    From 客户潜力分析A,客户基本信息C
    Where A.客户ID=C.客户ID
    And C.客户收入情况=‘低’

    在数据仓库中执行查询后,就会发现我们将客户原来家庭收入水平高时的消费数据也给筛选了出来,利用该数据分析得出的结论自然不符合实际情况。为了解决这个问题,我们引进了下面的办法。

    2.2 在维表中插入新记录

    具有时间属性的数据称为时态数据,在这里指需要保持属性的“历史值”的相关数据。数据仓库中存储了大量的历史数据,对其中有些数据必须考虑更新或删除时对主题分析的影响,也就是必须在数据仓库中反映出数据在存储期间如何受到更新、删除等事件的影响,以及对它们历史值的处理。在本方法中,通过建立新的记录来解决时态数据的变化问题。

    2.2.1 直接插入新记录

    当维表属性的值改变时,建立一条新记录,未受到影响的属性不变,只更改影响的属性以反映新值,主键ID也同时改变,且与原记录无关。
    本方法较好地解决了上面的查询问题,但由于新记录实体基本与原记录采用完全无关的主键ID,往往在查询时被认为是两个不同的实体,对维表实体的单独查询往往会出现错误的结果。如单独得到某类客户的消费信息,就会出现数据不全等错误结果。

    2.2.2 建立与“历史”数据相关的新记录

    当插入新的记录时,在主键ID中建立与原记录相关的信息(若主键为组合属性,如雪花模型中经常出现这种情况,可以在维表中建立附加字段,并以其作为唯一性标识符),如客户ID为“0102”的客户(01部门2号客户),其记录第一次进入数据仓库时,我们将其客户ID存储为“010201”,其中前四位为客户标识,后两位为版本号,表明客户记录第一次进入数据仓库。当客户记录第一次修改时,我们在维表中插入新的记录,其客户ID为“010202”,表明该客户为“0102”,其记录是第二次进入数据仓库。

    2.2.3 使用时间戳

    使用插入方法解决维表属性变化问题,较好地实现了历史数据的保存,但由于其没有时间属性来表示更改是在何时发生的,其对时间的支持,只能在事实表中事务的处理时间得到体现,因此对下面查询往往会得到不恰当的结果或者实现非常困难。

    一种是查询维表中当前的活动实体数目,因为使用的是插入更新,在查询维表中实体数目时,往往把已经删除的或更新的实体进行了累计,尤其是随着时间的推移,“过时”的数据越来越多,所得的查询会越来越失去其准确性。

    再就是关于时间的查询,例如查询一段时间内的活动实体,必须通过维表实体与事实表之间的关系,在大量数据中查找与事实表时间相关的活动实体,甚至还要查询其版本更新信息。

    为了解决上述问题,在维表中采用了加时间戳的方法。一种方法是在维表中加一个表示开始时刻的时间戳,在每次插入新实体时,记录实体生效的时间。不过该方法仍然不能很好地支持查询现有的活动实体数目,因为即使该实体已经在事务系统中删除,由于数据仓库中实体的生存周期,该实体的“历史”记录仍然存在于数据仓库中。

    另外一种办法是引入两个时间戳,一个表示开始时刻,一个表示结束时刻,在实体记录第一次插入维表中时,结束时刻为“NULL”,表示当前活动实体;每次更新时,前一版本的实体结束时刻为更新时刻,同时增加新的实体版本,其开始时刻为更新时刻,结束时刻为“NULL”。若一实体的行为活动间隔(最近两次事实表记录的时间间隔)大于规定的时间阀值(例如6个月),则认为其已经“死亡”,将其最后一次的行动时刻作为其结束时刻值(或者在事务系统删除记录时,利用ETL模块,对数据仓库进行更新)。

    2.3 增加记录原始值的列

    为了表示某些维表实体关联时间属性的变化情况,引进了本办法,它在维表中加入了记录关键时间属性原始值的列,在更新时,直接更新实体记录中当前值的数据,原始值不变,从而丢失了中间值。该方法在引入时间戳后,很容易地实现了实体在一段时间停止业务后,重新开展新的业务过程。

4 应 用

    在基于数据仓库的某小区水电管理系统中,就是采用了上述方法,在客户姓名、住址更新时采用了直接更新维表中的原记录的方法,因为它们与分析客户的消费潜力主题关系不大;对客户的职业、家庭收入水平采用了在维表中插人新记录的方法,同时为客户维表设置了附加字段,作为维表具有唯一性的独立主键,并为了支持时间查询,设置了实体变化的开始时间与结束时间字段,取得了较好的查询效果。

5 小 结

    作为支持CRM(客户关系管理)的数据仓库系统,其与一般数据仓库最大的区别就是其中含有大量的时态数据,在联机分析处理中,也往往涉及大量的“历史”数据的处理,通过对这些历史数据的处理,企业可以分析客户管理的情况,充分留住现有客户,发展新客户,因此对时态数据的支持是实现CRM数据仓库的关键技术。在实际应用中,应该根据具体的主题情况,对不同的时态数据予以不同的处理。


(本文不涉密)
责任编辑:

站点信息

  • 运营主体:中国信息化周报
  • 商务合作:赵瑞华 010-88559646
  • 微信公众号:扫描二维码,关注我们