一种OLAP预计算模型、自动建模方法及自动建模系统与流程

文档序号:11627749阅读:285来源:国知局
一种OLAP预计算模型、自动建模方法及自动建模系统与流程

本发明涉及olap多维数据分析的技术领域,尤其涉及一种olap预计算模型、自动建模方法及自动建模系统。



背景技术:

在信息化和数据化的时代,如何对数据进行多维分析以进行决策支持,是商务智能和数据挖掘领域的重要课题,olap(尤其是molap)就是为了解决这一问题而产生的。

一般情况下,数据仓库的数据量较大,直接在大量数据上进行多维聚合运算需要耗费大量的计算资源,以及过长的查询耗时。olap提供了一种基于预计算提高多维分析效率的解决方案,即通过实现一个“数据立方体”对数据仓库中的数据按不同的维度组合进行预聚合,并把结果保存下来;当分析师进行实际业务查询时,无需重新对数据执行聚合运算,而是直接读取预计算结果,这使得对百万甚至上亿数据规模的分析变得可能。

olapcube(数据立方体)是数据仓库中对于多维分析数据模型的抽象,包含了多维分析中不同的维度组合,例如,下图6所示中包含了4个维度,分别是time、item、location、supplier,这4个维度间不同的组合构成olapcube中的不同节点,每个节点代表在这些维度组合下的度量聚合结果。当用户进行多维分析时,所选定的维度组合对应cube中的一个点,考量的数值就是节点背后的度量聚合结果。

在常见的olap解决方案中,为了更加快速地对选定维度进行分析,会对olapcube进行物化,即提前通过预计算将olapcube上每个节点的度量进行聚合,并把结果保存起来。当业务分析人员执行查询时,系统可以直接对预计算结果进行返回。把o(n)级别的聚合运算转化成o(1)的结果查询,查询效率的提高可想而知。

olapcube还基于维度定义了维度的层级。例如year,month,day这三个维度之间存在着一种层级关系:year>month>day,这些层级关系往往可以和现有应用中的概念进行映射,方便分析师在数据挖掘系统中更加灵活地应用。

但是,在大数据多维分析场景中,数据规模往往在千亿甚至万亿级别,且维度数量过多、维度基数超大,存在维度爆炸的隐患。如果依然对所有维度组合的情况进行预计算,一定会导致预计算时间过长、结果数据量过大,这一方面增加了预计算和存储成本,另一方面也给大量预计算结果的扫描带来了挑战。



技术实现要素:

本发明所要解决的技术问题是:目前的技术对于维度数量过多、维度基数超大的数据分析业务,存在维度爆炸的隐患,并且预计算时间过长、结果数据量过大,一方面增加了预计算和存储成本,另一方面也给大量预计算结果的扫描带来了挑战。

为解决上面的技术问题,本发明提供了一种olap预计算模型,该预计算模型包括:维度模块、聚合组模块、度量模块;所述的维度模块包括普通维度单元和衍生维度单元;所述普通维度单元,用于对事实表上的字段进行预计算;所述衍生维度单元,用于对维表上的主键进行预计算,并记录维表上的列和主键的映射关系;所述衍生维度单元中的衍生维度的维表主键和所述普通维度单元中的普通维度作为预计算维度,符合特定排列顺序;所述聚合组模块,用于将在维度模块中预计算维度划分成多个聚合组;所述度量模块,用于按照维度模块中所有预计算维度的组合聚合生成预计算结果。

本发明的有益效果:通过增加衍生维度、聚合组等概念,对预计算维度进行更加有效的组合,减少冗余计算和数据存储,具有更高的计算效率和更小的存储占用,从而在大数据多维分析应用中取得更好的效果。

进一步地,所述的聚合组模块包括:必须维度单元、组合维度单元、层级维度单元、维数范围单元;所述的必须维度单元,用于记录包含某一特定维度a的所有维度组合;所述的组合维度单元,用于记录包含某一特定组合维度ab的所有维度组合;所述的层级维度单元,用于记录包含具有层级关系的某一特定组合维度abc的所有维度组合;所述维数范围单元,用于记录包含维度数量在一定范围的所有维度组合;所述的聚合组模块在将维度模块中的所有预计算维度划分成多个聚合组,同时保存维度模块中的所有预计算维度,用于对不同聚合组之间的的多维查询。

上述进一步的有益效果:本发明提出了聚合组概念,即把所有的预计算维度划分成若干个聚合组,只在每一个聚合组内部产生不同组合,不同聚合组之间不会交叉组合。此外,还会保留全维度的组合,用于应对跨聚合组的多维查询。根据业务间的依赖关系把相关的维度划分到同一个聚合组,就可以有效去除无意义的维度组合,降低了预计算代价。

进一步地,所述的衍生维度单元中包括:衍生维度,所述的衍生维度是维度基数与主键基数近似相等的维度。

上述进一步的有益效果:衍生维度本身并不会参与进行预计算,而是对维表主键进行预计算。此外,还把维表镜像保存下来,用于记录衍生维度列和主键的映射关系。因为维表的记录比较固定,且数据量往往不大,所以在查询时,可以快速查找维表镜像进行衍生维度和主键值的转换,再根据外键值查询维表镜像以找到度的值。当维表中设置了多个衍生维度,实际上只增加了一个预计算维度,实现了降维。

本发明还涉及一种基于olap预计算模型的自动建模方法,该方法包括如下步骤:

s1,根据用户给定的数据模型和数据源进行数据统计,得到数据统计结果;

s2,根据用户所给定的数据模型以及目标查询进行查询预演,确定业务模型;

s3,对样例进行查询预演,并收集查询统计;

s4,基于s2中的业务模型以及s1中数据统计结果,进行物理建模,并定义预计算模型的维度、度量、聚合组;

s5,基于s3中的查询统计对s4中进行物理建模后的模型进行调整,得到业务建模结果;

s6,对s5中的业务建模进行优化调整,得到预计算模型。

本发明的有益效果:通过本发明的方法解决大数据场景下的数据爆炸问题,提高查询效率,同时通过智能化手段提高生产效率,另外,自动建模方法运用到基于apachekylin的大数据分析平台上验证,通过自动建模创建的cube(预计算模型)在百亿数据规模上依然能够保证秒级的查询相应时间,并保证10倍以内的膨胀率,有效降低了apachekylin用户的学习难度和试错成本,优化了用户体验。

进一步地,所述s4中的物理建模包括:维度设置、度量设置、聚合组设置。

进一步地,所述的维度设置包括:普通维度设置和衍生维度设置,计算每一个维度的f(i)值,如果f(i)小于指定阀值,则设置为第i个维度为衍生维度,否则设置为普通维度;其中,定义函数f(i)=cd(col_i)/cd(pk),其中cd(col_i)是第i个维度的基数,cd(pk)是主键基数。衍生维度主键和普通维度作为预计算维度,根据基数按从大到小顺序排列。

进一步地,所述的聚合组设置,该聚合组设置的规则为:设置维数范围最小值、最大值为特定默认值;当cd(i)等于1,则设置该维度为必须维度;当cd(i)*cd(j)大于或等于cd(i,j),则设置第i维度和第j维度为一组组合维度;当cd(j)等于cd(i,j),则设置第i维度、第j维度为一组层级维度;其中,定义函数cd(i)是第i个维度的基数;第i维度、第j维度为层级关系。

进一步地,所述的s5中的进行调整,其调整包括:预计算维度顺序的调整和聚合组的调整。

进一步地,所述的预计算维度顺序的调整,该预计算顺序的调整规则为:定义score(i)=wp*cd(i)+wb*f(i)/f,则依据score(i)的值按照从大到小顺序对所有预计算维度进行排序;其中,定义f(i)为第i维度在查询中作为过滤条件的次数,f为查询统计中的过滤条件总数,定义wp为物理建模权重,wb为业务建模权重,cd(i)为第i维度的基数。

进一步地,所述聚合组的调整,该聚合组的调整的规则为:定义score(i)=wp*cd(i)+wb*p(i)/p,如果score(i)等于1,则设置第i维度为必须维度;定义score(i,j)=wp*cd(i)*cd(j)/cd(i,j)+wb*p(i,j)/p,如果第i维度和第j维度的score值大于设定阈值,则设置第i维度和第j维度为一个组合维度,其中,定义p(i)为第i维度在查询中出现的次数,p为样例个数,定义wp为物理建模权重,wb为业务建模权重,cd(i)为第i维度的基数;定义scorejoint(i,j)=score(i)*score(j),如果scorejoint(i,j)小于特定阈值,则将第i组组合维度和第j组组合维度合并为一组组合维度。定义max为查询统计结果中单次查询最大维度数,定义w为特定值的维数膨胀系数,则设置维数范围的最大值为max*w。

上述进一步的有益效果:物理建模和业务建模的平衡十分重要。如果物理建模权重过高,会导致模型泛化能力较强,但对于目标sql的查询性能可能无法做到最优;如果业务建模权重过高,会导致模型过拟合,仅对于目标sql能取得最优查询性能,但对目标sql之外的查询无法保证最优性能。因此,本发明的方法能够有效地避免这些问题的出现,提高模型的准确性。

本发明还涉及一种基于olap预计算模型的自动建模系统,该系统包括:数据统计模块、业务模型模块、查询统计模块、建模建立模块;数据统计模块,用于根据用户给定的数据模型和数据源进行数据统计,得到数据统计结果;业务模型模块,用于根据用户所给定的数据模型以及目标查询进行查询预演,确定业务模型;查询统计模块,用于对样例进行查询预演,并收集查询统计;建模建立模块,用于根据数据统计模块、业务模型模块、查询统计模块得到业务建模的结果。

附图说明

图1为本发明的一种olap预计算模型的结构示意图;

图2为本发明的一种基于olap预计算模型的自动建模方法的流程图;

图3为本发明的实施例衍生维度原理的示意图;

图4为本发明的实施例聚合组规则示意图;

图5为本发明的一种基于olap预计算模型的自动建模系统的示意图;

图6为本发明现有技术中的维度组合示意图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

实施例1

如图1所示的,本发明的一种olap预计算模型,该预计算模型包括:维度模块、聚合组模块、度量模块;所述的维度模块包括:普通维度单元和衍生维度单元;所述普通维度单元,用于对事实表上的字段进行预计算;所述的衍生维度单元,用于对维表上的主键进行预计算,并记录维表上的列和主键的映射关系;衍生维度的维表主键和普通维度作为预计算维度,符合特定排列顺序;所述的聚合组模块,用于将在维度模块中计算得到的多个预计算维度划分成多个聚合组;所述度量模块,用于按照维度模块中的所有预计算维度组合聚合生成预计算结果。

衍生维度

维表包含了某一维度的详细信息。也就是说,维表上很多列往往和维表主键有着紧密的映射关系。如图3所示的,以时间维表为例,维表主键cal_dt代表以日为单位的日期,维表列week_beg_dt代表主键日期所在周的起始日,维表列month_beg_dt代表主键日期所在月的起始日。如果对这些维度都进行预计算,那么这3个维度就会产生8种维度组合。但是,如果只对cal_dt进行预计算,而当查询需要week_beg_dt和month_beg_dt时通过映射关系把维度值转换成cal_dt的值,就可以仅需要把cal_dt参与预计算组合,这样只会产生2种维度组合,最终节省了75%的预计算代价。

为了实现这种方案,本发明提出了衍生维度的概念。衍生维度来源于维表,而且衍生维度本身并不会参与进行预计算,而是对维表主键进行预计算。此外,还需要把维表镜像保存下来,用于记录衍生维度列和主键的映射关系。因为维表的记录比较固定,且数据量往往不大,所以在查询时,可以快速查找维表镜像进行衍生维度和主键值的转换。再根据外键值查询维表镜像以找到度的值。当维表中设置了多个衍生维度,实际上只增加了一个预计算维度,实现了降维。

预计算维度顺序

在一般的查询引擎中,对于给定的维度组合,位于组合前端的维度,在作为查询过滤条件时,查询性能比位于末端的维度高。因此,把业务模型中经常作为过滤条件的维度放置在组合前端会提供查询效率。此外,高基数维度放置在组合前端也有助于大幅减小数据扫描和计算代价,缩短查询时间。

聚合组

在实际的多维分析场景中,并不是所有的维度组合都是有意义的。例如,供货商维度和网站流量维度并不会经常同时出现在多维度分析的案例中,如果依然对这种利用率极低的维度组合进行预计算是较为浪费的。

本发明提出了聚合组概念,即把所有的预计算维度划分成若干个聚合组,只在每一个聚合组内部产生不同组合,不同聚合组之间不会交叉组合。此外,还会保留全维度的组合,用于应对跨聚合组的多维查询。根据业务间的依赖关系把相关的维度划分到同一个聚合组,就可以有效去除无意义的维度组合,降低了预计算代价。

在同一个聚合组内部,维度间往往还存在一些关系。例如,某些维度几乎出现在所有的分析查询中,导致那些不包含该维度的维度组合使用率极低;某些维度总是同时出现在查询中,导致他们单独出现的维度组合使用率极低;某些维度存在层级关系,导致子维度单独出现的维度组合使用率极低;一次查询所使用的维度数量是有限的,导致高维数维度组合使用率极低。为了解决这些问题,本发明为一个聚合组定义了四种规则:必须维度规则、层级维度规则、组合维度规则、维数范围规则。其中,必须维度规则指的是某维度会出现在当前聚合组的每一种组合当中,即去除不包含必须维度的维度组合;组合维度规则指定若干组维度,每一组的维度会同时在维度组合中出现,即单独出现的组合被去除;层级维度规则也指定若干组维度,每组的维度间需要存在层级关系,如地域(国家、省、市)、时间(年、月、日)等,生成最终的维度组合时会舍弃所有的孤儿子树。如图4所示的,聚合组规则,a、b、c为三个维度,其中a为必须维度,a和b组合一起为组合维度,a>b>c设置为层级维度。维数范围规则指定一个最大值和最小值,即维度数量不在最小值到最大值范围间的组合被去除。

实施例2

如图2所示的,本发明的一种基于olap预计算模型的自动建模方法,该方法包括如下步骤:

s1,根据用户给定的数据模型和数据源进行数据统计,得到数据统计结果;

s2,根据用户所给定的数据模型以及目标查询进行查询预演,确定业务模型;

s3,对样例进行查询预演,并收集查询统计;

s4,基于s2中的业务模型以及s1中数据统计结果,进行物理建模,并定义预计算模型的维度、度量、聚合组;

s5,基于s3中的查询统计对s4中进行物理建模后的模型进行调整,得到业务建模结果;

s6,对s5中的业务建模进行优化调整,得到预计算模型。

通过上述的方法解决大数据场景下的数据爆炸问题,提高查询效率,同时通过智能化手段提高生产效率,另外,自动建模方法运用到基于apachekylin的大数据分析平台上验证,通过自动建模创建的cube(预计算模型)在百亿数据规模上依然能够保证秒级的查询相应时间,并保证10倍以内的膨胀率,有效降低了apachekylin用户的学习难度和试错成本,优化了用户体验。

如图5所示的,本发明自动建模的技术方案总体构架图,整个架构以预计算模型为目标输出,具体包含模型的维度(包含普通维度和衍生维度)、度量(预计算列及其算子)、聚合组等。因此,自动建模的工作就是以数据模型、数据统计特性、样例等作为输入,选择合适的维度列及维度类型,添加所需的度量及预计算算子,并设置合理的聚合组。

数据统计

对模型涉及的所有源数据表进行统计,可以为建模提供精确的数据支撑。尤其是维度的基数,通过基数可以预估一个维度对预计算结果的膨胀度。此外,很多olap系统会对维度编码以节省存储空间,了解列值的最大长度和数据类型有助于选择合适的编码方式。因此,自动建模之前需要对源数据表统计列的基数、极值、长度极值,以及数据采样。

在数据仓库中,数据模型定义好了表间关系和维度范畴,提供了预计算模型的样板。数据模型(datamodel)是数据特征的抽象,是数据库管理的教学形式框架。数据库系统中用以提供信息表示和操作手段的形式构架。数据模型包括数据库数据的结构部分、数据库数据的操作部分和数据库数据的约束条件。数据(data)是描述事物的符号记录。模型(model)是现实世界的抽象。事实上,数据模型上很多列之间有着很强的相关性,如一个订单的配送时间和下单时间,这两列的值往往符合相似的分布特征。在预计算建模阶段,可以利用这种相关性特征,恰当地设置聚合组规则,以解决维度灾难问题。因此,自动建模之前需要对数据模型上列与列的相关性进行统计。

查询预演

首先,本发明需要一个sql查询预演引擎,基于用户给定的数据模型,执行样例sql。本发明中的样例是指以前在进行sql的计算时,有得到的一些数据模板,这个引擎并不返回任何有意义的查询结果,而是在查询过程中对查询计划的分析结果进行整理和统计,主要包括:

生成业务模型:数据模型定义了业务分析的最大范畴,但实际的分析场景往往只关注数据模型的局部,本发明称之为业务模型。业务模型包含实际参与查询的维度和度量计算因子,也是初始化预计算模型的基础。

统计维度用途:在sql中,一个维度列主要用途是filter和groupby。这一步将统计每一个维度作为filter和groupby的次数。此外也统计了维度间两两同时出现的次数,用于从业务角度推测列与列的相关性。

物理建模

这一步是本发明的核心步骤。业务模型包含了业务分析所需的所有维度和度量,定义了预计算建模的基础。这一步基于各项数据统计,在业务模型的基础上进行建模,按照执行顺序,主要包括以下流程:

维度设置:维表上的维度列有两种类型可选:普通维度和衍生维度。其中,维度基数与主键基数相当的维度适合作为衍生维度。定义函数f(i)=cd(col_i)/cd(pk),其中cd(col_i)是第i个维度的基数,cd(pk)是主键基数。计算每一个维度的f(i)值,如果f(i)小于指定阀值,就设置第i个维度为衍生维度,否则设为普通维度。衍生维度主键和普通维度作为预计算维度,根据基数按从大到小顺序排列。

度量设置:经过查询预演,所有预计算需求已经统计在业务模型当中。直接基于业务模型的度量集合生成预计算度量即可。

聚合组设置:为了简化操作,默认把所有列添加到一个聚合组中。再根据聚合组中维度特性设置聚合组规则。定义函数cd(i)是第i个维度的基数,对所有维度进行如下检查:

当cd(i)≈1,则设置该维度为必须维度。

当cd(i)*cd(j)>>cd(i,j),则设置第i维度和第j维度为一组组合维度。

当cd(j)≈cd(i,j),则设置第i维度、第j维度为一组层级维度,层级关系为:第i维度、第j维度。

如果第i维度和第j维度同时是数据模型上表间join条件,且不参与其他表间join条件,则设置第i维度和第j维度为一组组合维度。

当cd(i)小于定义的阈值,则添加到组合维度候选组。最后将维度候选组划分为多个组合维度组,并保证每组的基数乘积在设定范围内。

对于维数范围规则,设置维数范围最小值、最大值为特定默认值。

业务建模

这一步以样例sql为主要依据,对物理建模给出的模型进行调整,以期优化目标sql的查询性能、收缩存储用量。但是,过度采用业务建模会使模型出现过拟合现象。因此,本发明设置权重来平衡物理建模和业务建模的结果。在本小节涉及的数学公式中,定义wp为物理建模权重,wb为业务建模权重,cd(i)为第i维度的基数。模型调整的主要过程如下:

调整聚合组规则:目标sql中维度使用次数及维度间的共存关系可以用来调整聚合组的规则。定义p(i)为第i维度在查询中出现的次数,p为样例个数,依照以下规则:

定义score(i)=wp*cd(i)+wb*p(i)/p,如果score(i)≈1,则考虑设置第i维度为必须维度;

定义score(i,j)=wp*cd(i)*cd(j)/cd(i,j)+wb*p(i,j)/p,如果第i维度和第j维度的score值大于设定阈值,则考虑设置第i维度和第j维度为一个组合维度;定义scorejoint(i,j)=score(i)*score(j),如果scorejoint(i,j)小于特定阈值,则将第i组组合维度和第j组组合维度合并为一组组合维度。

定义max为查询统计结果中单次查询最大维度数,定义w为特定值的维数膨胀系数,则设置维数范围的最大值为max*w。

定义score(i)=wp*cd(i)+wb*f(i)/f,则依据score(i)的值按照从大到小顺序对所有预计算维度进行排序;其中,定义f(i)为第i维度在查询中作为过滤条件的次数,f为查询统计中的过滤条件总数,定义wp为物理建模权重,wb为业务建模权重,cd(i)为第i维度的基数。

物理建模和业务建模的平衡十分重要。如果物理建模权重过高,会导致模型泛化能力较强,但对于目标sql的查询性能可能无法做到最优;如果业务建模权重过高,会导致模型过拟合,仅对于目标sql能取得最优查询性能,但对目标sql之外的查询无法保证最优性能。因此,在实际应用当中,需要根据实际需求设定建模方法的权重。

实施例3

如图5所示的,本发明的一种olap预计算模型的自动建模系统,该系统包括:数据统计模块、业务模型模块、查询统计模块、建模建立模块;数据统计模块,用于根据用户给定的数据模型和数据源进行数据统计,得到数据统计结果;业务模型模块,用于根据用户所给定的数据模型以及样例进行查询预演,确定业务模型;查询统计模块,用于对样例进行查询预演,并收集查询统计;建模建立模块,用于根据数据统计模块、业务模型模块、查询统计模块得到业务建模的结果。

在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。

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

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