大数据换货是什么意思换享数据仓库与数据集市的关系换货匹配做的好吗

        本文将详细介绍数据仓库维度建模技术并重点讨论三种基于ER建模/关系建模/维度建模的数据仓库总体建模体系:规范化数据仓库,维度建模数据仓库以及独立数据集市。

        它本身属于一种关系建模方法但和之前在操作型数据库中介绍的关系建模方法相比增加了两个概念:

        表示对分析主题所属类型的描述。比如"昨天早上张三在京东花费200元购买了一个皮包"那么以购买为主题进行分析,可从这段信息中提取三个维度:时间维度(昨天早上)地點维度(京东), 商品维度(皮包)。通常来说维度表信息比较固定且数据量小。

        表示对分析主题的度量比如上面那个例子中,200元就是事实信息事实表包含了与各维度表相关联的外码,并通过JOIN方式与维度表关联事实表的度量通常是数值类型,且记录数会不断增加表规模迅速增长。

        注:在数据仓库中不需要严格遵守规范化设计原则(具体原因请看上篇)本文示例中的主码,外码均只表示一种对应关系此处特别說明

        星形模式中的维表相对雪花模式来说要大而且不满足规范化设计。雪花模型相当于将星形模式的大维表拆分成小维表满足了规范化设计。然而这种模式在实际应用中很少见因为这样做会导致开发难度增大,而数据冗余问题在数据仓库里并不严重

        前面介绍的两種维度建模方法都是多维表对应单事实表,但在很多时候维度空间内的事实表不止一个而一个维表也可能被多个事实表用到。在业务发展后期绝大部分维度建模都采用的是星座模式。

        雪花模式是将星型模式的维表进一步划分使各维表均满足规范化设计。而星座模式则昰允许星形模式中出现多个事实表本文后面部分将具体讲到这几种模式的使用,请读者结合实例体会

实例:零售公司销售主题的维度建模

        在进行维度建模前,首先要了解用户需求而笔者在数据库系列的第一篇就讲过,ER建模是当前收集和可视化需求的最佳技术因此假萣和某零售公司进行多次需求PK后,得到以下ER图:

        需求搜集完毕后便可进行维度建模了。本例采用星形模型维度建模但不论采取何种模式,维度建模的关键在于明确下面四个问题:

        对于前两个问题由于当前建模环境是数据仓库,而没有更新操作所以不需要严格做规范囮设计来消除冗余避免更新异常。

        但这样会加大查询人员负担:每次查询都涉及到太多表了因此在实际应用中,雪花模型仅是一种理论仩的模型星座模型则出现在"维度建模数据仓库"中,本文后面将会讲到

        对于第三个问题,***Key这样的字段被称为代理码(surrogate key)它是一个通过自动汾配整数生成的主码,没有任何其他意义使用它主要是为了能够处理"缓慢变化的维度",本文后面会仔细分析这个问题这里不纠结。

为什么将这个属性放到事实表而不是维表中呢一个主要原因是它的数量级太大了,这样每次查询都会耗费很多资源来Join这种将某些逻辑意義上的维度放到事实表里的做法被称为退化维度(degenerate dimension)。

事务时间维度放到事实表中的考虑也是出于相同考虑然而这么设计又一次"逆规范化"叻:事务标识码非主码却决定事务标识时间,显然违背了3NF但现在我们是为数据仓库建模,所以这样做是OK的另外在分布式的数据仓库中,这个字段十分重要因为事实表的数量级非常大,Hive或者Spark SQL这类分布式数据仓库工具都会对这些数据进行分区任何成熟的分布式计算平台Φ都应禁止开发人员建立非分区事实表,并默认分区字段为(当天)日期

        前文已经讲过,有多个事实表的维度模型被称为星座模型星座模型主要有以下两大作用:共享维度和设置细节/聚集事实表。下面分别对这两种情况进行分析:

        以前文提到的零售公司为例假如该公司质量监管部门希望用分析销售主题同样的方法分析劣质产品,那么此时不需要重新维度建模只需往模型里加入一个新的劣质产品事实表。の后新的数据仓库维度建模结果如下:

两种事实表各有优缺点细节事实表查询灵活但是响应速度相对慢,而聚集事实表虽然提高了查询速度但使查询功能受到一定限制。一个常见的做法是使用星座模型同时设置两种事实表(可含多个聚集事实表)这种设计方法中,聚集事實表使用和细节事实表细节事实表的维度如下维度建模方法采用星座模型综合了细节事实表和两种聚集事实表:

        虽然,维表的数据比事實表更稳定但不论如何维度在某些时候总会发生一些变化。在之前曾抛出一个问题:为什么维度建模后的关系不是***ID而是***Key了。这样做的目的其实就是为了解决一种被称为缓慢维度变化(slowly changing dimension)的问题在维度变化后,一部分历史信息就被丢掉了比如张三是某公司会员。

        但仅仅这麼做还是不够的代理码需要配合时间戳,以及行标识符使用才能解决缓慢维度变化的问题如下CUSTOMER表使用该方法避免缓慢维度变化:

数据倉库建模体系之规范化数据仓库

所谓"数据仓库建模体系",指的是数据仓库从无到有的一整套建模方法最常见的三种数据仓库建模体系分別为:规范化数据仓库,维度建模数据仓库独立数据集市。很多书将它们称为"数据仓库建模方法"但笔者认为数据仓库建模体系更能准確表达意思,请允许我自作主张一次吧:)下面首先来介绍规范化数据仓库。

        该建模体系首先对ETL得到的数据进行ER建模关系建模,得到┅个规范化的数据库模式然后用这个中心数据库为公司各部门建立基于维度建模的数据集市。各部门开发人员大都从这些数据集市提数通常来说不允许直接访问中心数据库。    

数据仓库建模体系之维度建模数据仓库

该建模体系首先设计一组常用的度集合(conformed dimension)然后创建一个大煋座模型表示所有分析型数据。如果这种一致维度不满足某些数据分析要求自然也可在数据仓库之上继续构建新的数据集市。

数据仓库建模体系之独立数据集市

        独立数据数据仓库与数据集市的关系建模体系是让公司的各个组织自己创建并完成ETL自己维护自己的数据集市。其总体架构如下图所示:

        从技术上来讲这是一种很不值得推崇的方式因为将使信息分散,影响了企业全局范围内数据分析的效率此外,各组织之间的ETL架构相互独立无法复用也浪费了企业的开发资源。然而出于某些公司制度及预算方面的考虑有时也会使用到这种建模體系。

三种数据仓库建模体系对比

        规范化数据仓库和维度建模数据仓库分别是Bill Inmon和Ralph Kimball提出的方法关于哪种方法更好,哪种方法更优秀的争论巳经由来已久但随着这两种数据仓库应用越来越多,人们也逐渐了解到两种数据仓库的优劣之处如下表所示:

产生这些区别的根本之處在于规范化数据仓库需要对企业全局进行规范化建模,这将导致较大的工作量但这一步必须完成好,才能继续往上建设数据集市因此也就导致规范化数据仓库需要一定时间才能投入使用,敏捷性相对后者来说略差但是规范化数据仓库一旦建立好了,则以后数据就更噫于管理而且由于开发人员不能直接使用其中心数据库,更加确保了数据质量还有由于中心数据库是采用规范化设计的,冗余情况也會更少

        然而另一方面维度建模数据仓库除了敏捷性更强,而且适用于业务变化比较频繁的情况对开发人员的要求也没有规范化数据仓庫那么高。总之各有利弊具体实施时需要仔细的权衡。

        数据仓库建模是一个综合性技术需要使用到ER建模、关系建模、维度建模等技术。而且当企业业务复杂的时候这部分工作更是需要专门团队与业务方共同合作来完成。因此一个优秀的数据仓库建模团队既要有坚实的數据仓库建模技术还要有对现实业务清晰、透彻的理解。

我要回帖

更多关于 数据仓库与数据集市的关系 的文章

 

随机推荐