一种维度建模方法、装置、设备及存储介质与流程

文档序号:15637280发布日期:2018-10-12 21:37阅读:250来源:国知局

本发明涉及数据建模领域,尤其涉及一种维度建模方法、装置、设备及存储介质。



背景技术:

数据仓库建模方法通常分为3nf(thirdnormalform,第三范式)、维度建模、data-vault、anchor四种。在传统rdbms(relationaldatabasemanagementsystem,关系数据库管理系统)场景下,此四种模型设计方法能够覆盖到绝大部分应用场景,不同的建模方式为数据存储和分析提供了不同角度的便利性。

但是在数据量上升到tb\pb级别之后,其数据量的变化和基于hadoop体系的计算方式、存储方式的变化,放大了这些建模方法需要过多join(关联查询)的缺点。具体的,以在hive上对表a和表b通过表a的a1字段和表b的b1字段进行join为例,此查询会转化为一个hadoopmap-reduce作业,同时每当多join一张表,例如表a的a2字段再与表c的c1字段join,会再多一个map-reduce作业,map-reduce作业的个数的增加直接导致了查询效率的降低。

所以,如何减少关联查询,成为目前亟待解决的技术问题。



技术实现要素:

鉴于上述问题,提出了本发明实施例以便提供一种解决上述问题的维度建模方法、装置、设备及存储介质。

依据本发明实施例的一个方面,提供一种维度建模方法,包括:

根据业务需求,构建事实表和维度表的逻辑模型;

根据所述逻辑模型,构建所述事实表和维度表的物理模型;其中,在构建所述事实表的物理模型时,将指定的维度数据,以设定的复合字段,反规范化到所述事实表中。

可选地,所述复合字段的类型包括如下类型中的一个或多个:set类型、地图map类型、结构体struct类型、js对象标记json类型。

可选地,所述将指定的维度数据,以设定的复合字段,反规范化到所述事实表中,包括:

将指定的维度数据中,属于同一类型、具有多个值且多个值之间互相不重复的数据,以set类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,需要同时记录多组属性和值、组数不固定、属性之间类型相同、值之间类型相同的数据,以map类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,记录数量固定的、属性类型不统一、值的类型不统一的数据,以struct类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,可进行灵活字段扩展的数据,以json类型的复合字段,反规范化到所述事实表中。

可选地,所述指定的维度数据包括:通过预先统计分析确定的热点维度数据,和/或,杂项维度数据。

可选地,在构建所述事实表的物理模型时,还包括:

当事实表中的事实项与维度表中的维度项为一对多关系时,将所述事实项与多个维度项之间的关系,以设定的复合字段,记录在所述事实表中。

可选地,本发明实施例所述方法还包括:在构建维度表的物理模型时,将多对多维度关系,以设定的复合字段,记录在所述维度表中。

可选地,在构建所述事实表和维度表的物理模型后,还包括:

当接收到数据查询请求时,通过查询所述事实表,获取查询数据;

和/或,当需要维度扩展时,将扩展的维度数据以map类型的复合字段,记录在所述事实表中。

依据本发明实施例的二个方面,提供一种维度建模装置,包括:

第一模型构建模块,用于根据业务需求,构建事实表和维度表的逻辑模型;

第二模型构建模块,用于根据所述逻辑模型,构建所述事实表和维度表的物理模型;其中,在构建所述事实表的物理模型时,将指定的维度数据,以设定的复合字段,反规范化到所述事实表中。

可选地,所述复合字段的类型包括如下类型中的一个或多个:set类型、map类型、struct类型、json类型。

可选地,所述第二模型构建模块,具体用于:

将指定的维度数据中,属于同一类型、具有多个值且多个值之间互相不重复的数据,以set类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,需要同时记录多组属性和值、组数不固定、属性之间类型相同、值之间类型相同的数据,以map类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,记录数量固定的、属性类型不统一、值的类型不统一的数据,以struct类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,可进行灵活字段扩展的数据,以json类型的复合字段,反规范化到所述事实表中。

可选地,所述指定的维度数据包括:通过预先统计分析确定的热点维度数据,和/或,杂项维度数据。

可选地,所述第二模型构建模块,还用于当事实表中的事实项与维度表中的维度项为一对多关系时,将所述事实项与多个维度项之间的关系,以设定的复合字段,记录在所述事实表中。

可选地,所述第二模型构建模块,还用于在构建维度表的物理模型时,将多对多维度关系,以设定的复合字段,记录在所述维度表中。

可选地,还包括:查询模块,用于在构建所述事实表和维度表的物理模型后,当接收到数据查询请求时,通过查询所述事实表,获取查询数据;

可选地,所述第二模型构建模块,还用于在构建所述事实表和维度表的物理模型后,当需要维度扩展时,将扩展的维度数据以map类型的复合字段,记录在所述事实表中。

依据本发明实施例的三个方面,提供一种计算设备,所述计算设备包括:存储器、处理器及通信总线;所述通信总线用于实现处理器和存储器之间的连接通信;

所述处理器用于执行存储器中存储的维度建模程序,以实现上述的维度建模方法的步骤。

依据本发明实施例的四个方面,提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现上述的维度建模方法的步骤。

本发明实施例上述方案,通过将维度数据反规范化到事实表中,便于数据查询时,直接查询事实表,无需进行关联查询。并且,在反规范化到事实表中时,按照设定的复合字段进行存储记录,避免了冗余后的字段膨胀。

上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明实施例的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明实施例的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为传统维度建模理论的数据模型示意图;

图2为本发明第一实施例提供的一种维度建模方法的流程图;

图3为本发明第二实施例提供的一种维度建模方法的流程图;

图4为本发明第三实施例提供的一种维度建模方法的流程图;

图5为本发明第四实施例提供的一种维度建模方法的流程图;

图6为本发明第五实施例提供的一种维度建模方法的流程图;

图7为本发明第七实施例提供的一种维度建模装置的结构框图;

图8为本发明第七实施例提供的维度建模装置的又一结构框图;

图9为本发明第八实施例提供的一种计算设备的结构框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

如图1所示,为传统维度建模理论将数据模型划分为事实表和维度表,通过事实表记录业务过程的事件,通过维度表记录业务过程发生的环境。在维度表中需要为每个维度值生成唯一的代理键,通过维度表的数据状态转移实现缓慢变化维度的处理以记录环境变化历史。同时在事实表中保存维度对应代理键以方便与维度表进行关联分析。然而,关联分析将直接导致了查询效率的降低。对此,提出了本发明实施,具体的:

在本发明第一实施中,提供的一种维度建模方法,确切的,本发明实施例所述方法是基于kimball提出的维度建模的改进,如图2所示,本实施例所述维度建模方法包括如下步骤:

步骤s201,根据业务需求,构建事实表和维度表的逻辑模型;

步骤s202,根据所述逻辑模型,构建所述事实表和维度表的物理模型;其中,在构建所述事实表的物理模型时,将指定的维度数据,以设定的复合字段,反规范化到所述事实表中。

在本发明的一个可选实施例中,考虑到在基于hadoop体系的大数据架构中进行数据更新和数据关联查询的代价增高,数据存储的代价大大降低,模型中的字段类型更加灵活。基于此特性,本实施例在传统数据库的属性类型之上扩展提供了如表1所示的复合字段设计:

表1

需要指出的是,本领域技术人员可以根据需求灵活的增加或减少复合字段的类型。

基于上述的复合字段的设计,本发明实施例步骤s202中,将指定的维度数据,以设定的复合字段,反规范化到所述事实表中,具体实现方式包括:

将指定的维度数据中,属于同一类型、具有多个值且多个值之间互相不重复的数据,以set类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,需要同时记录多组属性和值、组数不固定、属性之间类型相同、值之间类型相同的数据,以map类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,记录数量固定的、属性类型不统一、值的类型不统一的数据,以struct类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,可进行灵活字段扩展的数据,以json类型的复合字段,反规范化到所述事实表中。

进一步地,按照本发明实施例所述方法生成事实表和维度表后,当接收到数据查询请求时,通过查询所述事实表,获取查询数据。

也就是说,在数据查询方面,直接以事实表查询分析。对于绝大部分的热点维度值来说可以减少一次维度表关联查询操作,直接进行数据分析,同时也能规避掉数据分析人员对sqljoin性能了解不深带来的sql查询效率问题。

另外,需要指出的是,如何构建事实表和维度表的逻辑模型并不是本发明侧重保护方向,所以针对该部分内容,本实施例不再展开说明,任何事实表和维度表的逻辑模型构建方案,均可应用于本发明。

综上,本实施例所述方法,通过将维度数据反规范化到事实表中,便于在数据查询时,直接查询事实表,无需进行关联查询。并且,传统的kimball理论相比较于3nf理论和data-vault理论而言,需要通过适量的数据冗余,但是其冗余是将被引用的维度表中的字段信息也通过相同字段命名的方式冗余进引用维度表或者事实表,会造成引用表的列膨胀,从而增加数据分析人员理解模型的难度。而本发明实施是对kimball模型改进,具体的,在反规范化到事实表中时,按照设定的复合字段进行存储记录,避免了冗余后的字段膨胀。

在本发明的第二实施例中,提供一种维度建模方法,如图3所示,本实施例所述维度建模方法包括如下步骤:

步骤s301,根据业务需求,构建事实表和维度表的逻辑模型;

步骤s302,根据所述逻辑模型,构建所述事实表和维度表的物理模型;

其中,在构建所述事实表的物理模型时,将指定的维度数据,以设定的复合字段,反规范化到所述事实表中。其中,所述指定的维度数据包括:通过预先统计分析确定的热点维度数据,和/或,杂项维度数据。

本实施例中,关于复合字段的设计具体参见第一实施例,在此不再赘述。

本实施例中,反规范化到事实表中的维度数据包括维度表中的数据。为了避免将不必要的数据冗余到事实表中,可选的,对维度表中的数据进行分析,确定出热点维度数据,将热点维度数据进行反规范化。

下面通过一个示例,来说明将维度数据,以map类型的复合字段反规范化到事实表中。

假设表a为用户行为明细事实表(记录用户每一个购买商品行为),表b为用户信息维度表(记录每个用户的年龄、性别、籍贯等信息),在构建完两个表的基础模型后,需要基于数据分析的需求,将b表中常被查询用到的字段以map格式保存在a表中一份,即,使用大数据体系中sql引擎支持的复合字段来冗余一部分维度表中热点数据,map中key对应b表中字段的字段名,value对应字段的值。

本实施例中,反规范化到事实表中的维度数据还包括杂项维度数据。

具体的,在维度建模的数据仓库中,有一种维度叫junkdimension,中文一般翻译为“杂项维度”。杂项维度是由操作系统中的指示符或者标志字段组合而成,一般不在一致性维度之列。

在数仓建模中,定义好各种维度后,通常还会剩下一些在小范围内取离散值的指示符或者标志字段。例如:支付类型字段,包括现金和信用卡两种类型,在源系统中它们可能是维护在类型表中,也可能直接保存在交易表中。

一张事实表中可能会存在好几个类似的字段,如果作为事实存放在事实表中,会导致事实表占用空间过大;如果单独建立维度表,外键关联到事实表,会出现维度过多的情况;如果将这些字段删除,也不恰当。

这时,维度建模理论通常的解决方案就是建立杂项维度,将这些字段建立到一个维度表中,在事实表中只需保存一个外键。几个字段的不同取值组成一条记录,生成代理键,存入维度表,并将该代理键保存入相应的事实表字段。而本发明实施例中,将杂项维度直接以设计的复合字段的格式保存在事实表中,减少etl(extract-transform-load,抽取-转换-加载)的复杂度和对模型的理解的复杂度。在一个示例性的实施例中,将杂项维度以map类型的复合字段记录在事实表中。

综上,通过将维度数据反规范化到事实表中,便于数据查询时,直接查询事实表,无需进行关联查询。并且,在反规范化到事实表中时,按照设定的复合字段进行存储记录,避免了冗余后的字段膨胀。进一步地,本实施例中,所涉及的维度数据不仅包括维度表中的数据,还包括杂项维度的数据,将杂项维度的数据以复合字段的方式保存在事实表中,减少etl的复杂度和对模型的理解的复杂度。

在本发明的第三实施例中,提供一种维度建模方法,如图4所示,本实施例所述维度建模方法包括如下步骤:

步骤s401,根据业务需求,构建事实表和维度表的逻辑模型;

步骤s402,根据所述逻辑模型,构建所述事实表和维度表的物理模型;

其中,在构建所述事实表的物理模型时,将指定的维度数据,以设定的复合字段,反规范化到所述事实表中;以及,当事实表中的事实项与维度表中的维度项为一对多关系时,将所述事实项与多个维度项之间的关系,以设定的复合字段,记录在所述事实表中。

本实施例中,关于复合字段的设计具体参见第一实施例,在此不再赘述。

本发明实施例中,当事实表中的事实项与维度表中的维度项为一对多关系时,例如,一个订单中商品由多个供应商供货,通常在订单事实和供应商维度之间建立一个桥接表,其记录订单和供应商的关系,事实表中只基于桥接表的主键,查询供应商时首先使用此主键与桥接表关联,然后再与供应商维度表关联。而本发明实施例中规定可以将订单与多个供应商的供应关系以设定的复合字段的格式存储在事实表中。在一个具体应用示例中,以struct或者map格式保存在事实表中。

综上,通过将维度数据反规范化到事实表中,便于数据查询时,直接查询事实表,无需进行关联查询。并且,在反规范化到事实表中时,按照设定的复合字段进行存储记录,避免了冗余后的字段膨胀。进一步地,本实施例中,将事实和维度的一对多关系也通过复合字段存储在事实表中,进一步避免了关联查询。

在本发明的第四实施例中,提供一种维度建模方法,如图5所示,本实施例所述维度建模方法包括如下步骤:

步骤s501,根据业务需求,构建事实表和维度表的逻辑模型;

步骤s502,根据所述逻辑模型,构建所述事实表和维度表的物理模型;

其中,在构建所述事实表的物理模型时,将指定的维度数据,以设定的复合字段,反规范化到所述事实表中;在构建维度表的物理模型时,将多对多维度关系,以设定的复合字段,记录在所述维度表中。

本实施例中,关于复合字段的设计具体参见第一实施例,在此不再赘述。

本发明实施例中,关于多对多维度关系,例如,组织结构这种有层次性的维度表,通常通过一个维度表记录各个组织结构之间的父子关系,而本发明实施例中,规定将某条记录所对应的各个层级的信息全冗余在本记录的复合字段中,例如,map<key1,map<key2,value>>类型的字段中。例如当前部门为第3级部门,其冗余的复杂字段中key1代表父系所有部门的层级,key2代表其父系层级部门的基本属性信息。因此可以减少分析时的关联查询次数。

综上,通过将维度数据反规范化到事实表中,便于数据查询时,直接查询事实表,无需进行关联查询。并且,在反规范化到事实表中时,按照设定的复合字段进行存储记录,避免了冗余后的字段膨胀。进一步地,在维度和维度多对多关系方面,以事实表复合字段类型(例如map或者struct)记录,可以减少分析时的关联查询次数。

在本发明的第五实施例中,提供一种维度建模方法,如图6所示,本实施例所述维度建模方法包括如下步骤:

步骤s601,根据业务需求,构建事实表和维度表的逻辑模型;

步骤s602,根据所述逻辑模型,构建所述事实表和维度表的物理模型;

其中,在构建所述事实表的物理模型时,将指定的维度数据,以设定的复合字段,反规范化到所述事实表中;以及在构建所述事实表和维度表的物理模型后,当需要维度扩展时,将扩展的维度数据以map类型的复合字段,记录在事实表中。

本实施例中,关于复合字段的设计具体参见第一实施例,在此不再赘述。

本发明实施例中,在热维度扩展方面,以事实表map类型数据记录。例如地理位置维度表这种面向国际化应用时可能多地名称不一致的问题,通常通过每个国家一个本地化的地理位置维度表提供服务,而不同的维度表拥有相同的维度key但是值本地化处理,此建模方式为热可替换维度建模,本实施例通过将数据直接冗余在事实表map类型中方式解决。

在本发明的第六实施例中,提供一种维度建模方法,本实施例所述方法在传统的维度建模的冗余理论之上,提供了一套复合维度字段设计,并且基于此设计优化了维度建模没能解决的‘冗余后导致字段膨胀’和‘冗余不足导致的模型可读性差及仍需关联’之间的问题和矛盾。

具体的复合维度字段的设计参见表1。此设计可以精简数据库表的属性列表,基于此新增的复合字段设计,本实施例所述方法提供以下维度建模优化标准,以改进维度建模理论在大数据架构下的模型应用,具体如表2所示。

表2

可以说本实施例是实施例一至五方案的结合。当然,本领域技术人员可以根据需求灵活选择方案结合,本实施例不做结合形式做唯一要求。

总之,本实施例所述方法,提供了一套基于kimball提出的维度建模的改进的大数据建模理论。降低了大数据分析场景下的数据复杂度,增加了数据分析效率。基于本方法,在提供给业务分析人员更简洁易懂的数据模型的同时还可以规避掉大部分数据分析时所需的关联查询(join)操作。

在本发明的第七实施例中,提供一种维度建模装置,如图7所示,包括:

第一模型构建模块710,用于根据业务需求,构建事实表和维度表的逻辑模型;

第二模型构建模块720,用于根据所述逻辑模型,构建所述事实表和维度表的物理模型;其中,在构建所述事实表的物理模型时,将指定的维度数据,以设定的复合字段,反规范化到所述事实表中。

可选地,本发明实施例中,复合字段的类型包括如下类型中的一个或多个:set类型、map类型、struct类型、json类型。上述字段类型的设计原理参见表1,再次不再赘述。需要指出的是,本领域技术人员可以根据需求灵活的增加或减少复合字段的类型。

此时,本发明实施例中,第二模型构建模块720,具体用于:

将指定的维度数据中,属于同一类型、具有多个值且多个值之间互相不重复的数据,以set类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,需要同时记录多组属性和值、组数不固定、属性之间类型相同、值之间类型相同的数据,以map类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,记录数量固定的、属性类型不统一、值的类型不统一的数据,以struct类型的复合字段,反规范化到所述事实表中;

和/或,将指定的维度数据中,可进行灵活字段扩展的数据,以json类型的复合字段,反规范化到所述事实表中。

在本发明的一个可选实施例中,反规范化到事实表中的维度数据包括维度表中的数据。为了避免将不必要的数据冗余到事实表中,可选的,对维度表中的数据进行分析,确定出热点维度数据,将热点维度数据进行反规范化。

可选地,本实施例中,反规范化到事实表中的维度数据还包括杂项维度数据。在一个示例性的实施例中,将杂项维度以map类型的复合字段记录在事实表中。

在本发明的一个可选实施例中,第二模型构建模块720,还用于当事实表中的事实项与维度表中的维度项为一对多关系时,将所述事实项与多个维度项之间的关系,以设定的复合字段,记录在所述事实表中。在一个具体应用示例中,以struct或者map格式保存在事实表中。

在本发明的一个可选实施例中,第二模型构建模块720,还用于在构建维度表的物理模型时,将多对多维度关系,以设定的复合字段,记录在所述维度表中。

在本发明的一个可选实施例中,所述第二模型构建模块720,还用于在构建所述事实表和维度表的物理模型后,当需要维度扩展时,将扩展的维度数据以map类型的复合字段,记录在所述事实表中。

在本发明的一个可选实施例中,如图8所示,所述装置还包括:

查询模块730,用于在构建所述事实表和维度表的物理模型后,当接收到数据查询请求时,通过查询所述事实表,获取查询数据。也就是说,在数据查询方面,直接以事实表查询分析。对于绝大部分的热点维度值来说可以减少一次维度表关联查询操作,直接进行数据分析,同时也能规避掉数据分析人员对sqljoin性能了解不深带来的sql查询效率问题。

综上所述,本发明实施例,通过将维度数据反规范化到事实表中,便于数据查询时,直接查询事实表,无需进行关联查询。并且,在反规范化到事实表中时,按照设定的复合字段进行存储记录,避免了冗余后的字段膨胀。

在本发明的第八实施例中,还提供一种计算设备,如图9所示,所述计算设备包括:存储器910、处理器920及通信总线930;所述通信总线930用于实现处理器920和存储器910之间的连接通信;

所述处理器920用于执行存储器910中存储的维度建模程序,以实现如第一实施例至第五实施例任意一实施例所述的方法步骤。

由于第一实施例至第五实施例已经对维度建模方法进行了详细的阐述,本发明实施例在此不再赘述。

在本发明的第九实施例中,还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现如第一实施例至第五实施例任意一实施例所述的方法步骤。

由于第一实施例至第五实施例已经对维度建模方法进行了详细的阐述,本发明实施例在此不再赘述。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1