公开/公告号CN108052522A
专利类型发明专利
公开/公告日2018-05-18
原文格式PDF
申请/专利权人 上海跬智信息技术有限公司;
申请/专利号CN201711065734.8
申请日2017-11-02
分类号G06F17/30(20060101);
代理机构11212 北京轻创知识产权代理有限公司;
代理人杨立;李莹莹
地址 201203 上海市浦东新区自由贸易试验区亮秀路112号A座404A室
入库时间 2023-06-19 05:22:59
法律状态公告日
法律状态信息
法律状态
2020-08-25
授权
授权
2018-06-12
实质审查的生效 IPC(主分类):G06F17/30 申请日:20171102
实质审查的生效
2018-05-18
公开
公开
技术领域
本发明属于OLAP预计算领域,尤其涉及一种对OLAP预计算模型进行动态优化的方法及系统。
背景技术
在现有的OLAP解决方案中,为了更加快速地对选定维度进行分析,会对OLAP Cube进行物化,即提前通过预计算将OLAP Cube上每个节点的度量进行聚合,并把结果保存起来。当业务分析人员执行查询时,系统可以直接对预计算结果进行返回。把O(N)级别的聚合运算转化成O(1)的结果查询。
但是,在遇到所需要分析的内容无法从这些已知的维度直接获取时,分析结果便不能根据OLAP Cube的方式进行预先计算了。比如我们假设time这个维度记录的是订单生成的详细日期,分析订单时我们需要对比分析每个月的不同周的销售情况,那么在查询时我们就要对该time维度进行逻辑计算,获取该日期在当月的第几周内。由于预计算是在日期这个粒度上进行的,所以我们在查询时,需要先将之前在日期粒度上计算的结果查出,然后再根据日期计算出的周数进行汇总。这是基于预计算的OLAP技术方案在处理包含业务逻辑计算的复杂查询时的常见问题。无法对业务逻辑进行预先计算,在查询时,还需要在数据立方体上进行再次扫描,实时的对业务逻辑进行二次计算,这大大降低了查询效率。
目前大多是通过创建视图或者抽取、转换、加载(ETL)等方式将包含业务逻辑的计算变换成一个或者多个列,预计算时使用转换后的列作为预计算的维度,充分利用预计算的优势,达到提高查询效率的目的。
但是这样的方式会导致由于原始业务逻辑已经通过创建视图或者ETL转换成新的列,当与客户端集成时,对应的查询语句也需要发生变化,查询需要被改写成使用新创建的列的查询,而非原始查询。这对于使用工具生成查询语句的系统来说,集成的成本非常高,需要对工具进行二次开发或者改写。对于使用第三方商业软件进行查询的系统来说,甚至是无法集成。
通常来说,业务逻辑是会发生变化的。当业务逻辑发生变化时,通过创建视图或者ETL转换的列也要进行一定的改动。这势必会使得视图会被频繁的改写,或者ETL的实现代码不断的被修改。该技术方案并不能灵活应对业务逻辑的变化,带来了较高的维护成本。
另外,在提高查询效率的同时也需要消耗成本,因此并不是预先计算的内容越多越好。通常来说,我们对那些频繁被查询到的内容才进行预计算。那么对于使用创建视图和ETL转换的方案来说,难以正确区分频繁查询到的内容与偶尔查询的内容,无法对所有的情况进行通用的处理,这样也大大增加了预计算的成本。
发明内容
本发明所要解决的技术问题是:现有的OLAP查询方式,其效率比较低,预计算成本比较高,通用性差,灵活性差。
为解决上面的技术问题,本发明提供了一种对OLAP预计算模型进行动态优化的方法,该方法包括:
S1,接收用户输入的查询语句;
S2,根据预定义引擎规则分析所述查询语句中使用的查询信息,判断所述查询信息中是否有与所述预定义引擎规则中的查询规则相匹配的特征查询信息;
S3,若匹配,则统计所述特征查询信息的出现次数,并将所述特征查询信息存储到统计数据库中;
S4,根据所述预定义引擎规则,从所述特征查询信息中查找出当前OLAP预计算模型不支持的特征查询信息,将所述不支持的特征查询信息转换成新的虚拟查询信息;
S5,将所述新的虚拟查询信息添加到原始查询表中,形成新的查询表;
S6,根据所述新的查询表和所述新的虚拟查询信息,创建新的OLAP预计算模型,并用所述新的OLAP预计算模型替换所述当前OLAP预计算模型。
本发明的有益效果:通过上述对OLAP预计算模型进行优化的方法,创建新的OLAP预计算模型,这样可以提升查询效率,减少存储空间,对用户透明,且生成新的OLAP预计算模型,使得用户的查询无需再修改,该新的OLAP预计算模型动态解析查询,并将其转换成对新模型的访问,从而更高效地应对大数据上灵活复杂的分析场景。
进一步地,所述查询信息包括:数据表格信息、维度信息、度量信息、查过滤条件信息、计算表达式信息、查询语句出现的次数和概率。
进一步地,所述预定义引擎规则中的查询规则包括:查询语句中的数据计算公式规则、数据字段拼接规则、数据格式转换规则和数据比较条件规则。
进一步地,所述S6中具体包括:
S61,复制一个所述当前OLAP预计算模型;
S62,根据所述新的查询表和所述新的虚拟查询信息,对复制的当前OLAP预计算模型进行创建,得到新的OLAP预计算模型;
S63,对所述新的OLAP预计算模型进行计算优化,将优化后的所述新的OLAP预计算模型替换所述当前OLAP预计算模型。
进一步地,所述新的查询表是真实存在的查询信息表或者在加载查询信息时动态创建的虚拟表。
进一步地,该方法还包括:
S7,重新获取新的查询语句,对所述新的查询语句进行识别,查找出所述新的查询语句中的所述不支持的特征查询信息;
S8,将所述不支持的特征查询信息转换成所述新的虚拟查询信息;
S9,将所述新的虚拟查询信息输入到所述新的OLAP预计算模型进行统计计算。
上述进一步地有益效果:将识别查询中的低效率的计算逻辑,转换成对新的虚拟的查询信息,这样既不需要改变查询语句,还大大提高了模型的查询效率,也提高了模型的实用性。
本发明还涉及一种对OLAP预计算模型进行动态优化的系统,该系统包括:查询统计分析器、模型优化器、规则引擎库、统计数据库;
所述规则引擎库,用于预定义引擎规则,以及将所述预定义引擎规则提供给所述查询统计分析器在查询语句时使用的
所述查询统计分析器,用于接收用户输入的查询语句,根据预定义引擎规则分析所述查询语句中使用的查询信息,判断所述查询信息中是否有与所述预定义引擎规则中的查询规则相匹配的特征查询信息;
还用于当所述查询信息中有与所述预定义引擎规则中的查询规则相匹配的特征查询信息时,统计所述特征查询信息的出现次数,并将所述特征查询信息存储到所述统计数据库中;
所述模型优化器,用于根据所述预定义引擎规则,从所述特征查询信息中查找出当前OLAP预计算模型不支持的特征查询信息,将所述不支持的特征查询信息转换成新的虚拟查询信息;
还用于将所述新的虚拟查询信息添加到原始查询表中,形成新的查询表;以及还用于根据所述新的查询表和所述新的虚拟查询信息,创建新的OLAP预计算模型,并用所述新的OLAP预计算模型替换所述当前OLAP预计算模型。
本发明的有益效果:通过上述对OLAP预计算模型进行优化的系统,创建新的OLAP预计算模型,这样可以提升查询效率,减少存储空间,对用户透明,且生成新的OLAP预计算模型,使得用户的查询无需再修改,该新的OLAP预计算模型动态解析查询,并将其转换成对新模型的访问,从而更高效地应对大数据上灵活复杂的分析场景。
进一步地,所述查询信息包括:数据表格信息、维度信息、度量信息、查过滤条件信息、计算表达式信息、查询语句出现的次数和概率。
进一步地,所述预定义引擎规则中的查询规则包括:查询语句中的数据计算公式规则、数据字段拼接规则、数据格式转换规则和数据比较条件规则。
进一步地,所述模型优化器,用于根据所述新的查询表和新的虚拟查询信息,创建新的OLAP预计算模型,并将所述新的OLAP预计算模型替换所述当前OLAP预计算模型时,其具体用于复制一个所述当前OLAP预计算模型;根据所述新的查询表和所述新的虚拟查询信息,对复制的当前OLAP预计算模型进行创建,得到新的OLAP预计算模型;对所述新的OLAP预计算模型进行计算优化,并用优化后的所述新的OLAP预计算模型替换所述当前OLAP预计算模型。
上述进一步地有益效果:将识别查询中的低效率的计算逻辑,转换成对新的虚拟的查询信息,这样既不需要改变查询语句,还大大提高了模型的查询效率,也提高了模型的实用性。
附图说明
图1为本发明实施例1中的一种对OLAP预计算模型进行动态优化的方法的流程图;
图2为实施例4中另一种对OLAP预计算模型进行动态优化的方法的流程图;
图3为实施例6中另一种对OLAP预计算模型进行动态优化的方法的流程图;
图4为本发明实施例7一种对OLAP预计算模型进行动态优化的系统的结构示意图;
图5为实施例10另一种对OLAP预计算模型进行动态优化的系统的结构示意图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
如图1所示,本发明实施例1中提供的是一种对OLAP预计算模型进行动态优化的方法,该方法包括:
S1,接收用户输入的查询语句;
S2,根据预定义引擎规则分析所述查询语句中使用的查询信息,判断所述查询信息中是否有与所述预定义引擎规则中的查询规则相匹配的特征查询信息;
S3,若匹配,则统计所述特征查询信息的出现次数,并将所述特征查询信息存储到统计数据库中;
S4,根据所述预定义引擎规则,从所述特征查询信息中查找出当前OLAP预计算模型不支持的特征查询信息,将所述不支持的特征查询信息转换成新的虚拟查询信息;
S5,将所述新的虚拟查询信息添加到原始查询表中,形成新的查询表;
S6,根据所述新的查询表和所述新的虚拟查询信息,创建新的OLAP预计算模型,并用所述新的OLAP预计算模型替换所述当前OLAP预计算模型。
需要说明的是,在本实施例1中是持续不断地收集和分析用户输入的查询语句,在规则引擎服务器(用于给管理员管理和扩充引擎规则的)中预先定义了引擎规则,查询统计分析器在获取到用户输入的查询语句后,就会调用存储在规则引擎服务器中预定义引擎规则对查询语句中使用的查询信息进行分析,再判断该查询信息中是否有与该预定义引擎规则中的查询规则相匹配的特征查询信息,比如:查询年龄段50-60岁,在查询规则中是否存在这样的50-60岁年龄段。
当检查到是匹配的时候,统计这些特征查询信息的出现次数,还要将这些特征查询信息存储进到统计数据库中,以便后续的使用,这个统计数据库是为了方便给系统管理员对数据进行可以管理或者扩充的。
接着,模型优化器就会根据统计分析器收集的信息,对在查询中频繁出现的、但没有直接被现有模型支持的特征查询信息进行转换(比如:查询使用的语句时50-60岁年龄段,而实际查询使用的是50岁,现有模型不支持50-60岁年龄段),将它们转换成新的虚拟属性,添加到新的查询表中;新的查询表可以是一张真实存在的表,也可以是一张在加载数据时动态创建的虚拟表;随后,基于当前OLAP预计算模型,使用新表和新属性,创建更新优化的模型。新模型创建后,通知OLAP平台对新模型加载并计算,完成后,替换当前OLAP预计算模型。
在本实施例1中通过上述对OLAP预计算模型进行优化的方法,创建新的OLAP预计算模型,这样可以提升查询效率,减少存储空间,对用户透明,且生成新的OLAP预计算模型,使得用户的查询无需再修改,该新的OLAP预计算模型动态解析查询,并将其转换成对新模型的访问,从而更高效地应对大数据上灵活复杂的分析场景。
可选地,在另一实施例2中所述查询信息包括:数据表格信息、维度信息、度量信息、查过滤条件信息、计算表达式信息、查询语句出现的次数和概率。
需要说明的是,本实施例2是对上述实施例1中的查询信息的细化说明如:1)查询用到的数据表格;2)查询用到的维度及其它信息;3)查询用到的度量及其它信息;4)查询用到的过滤条件;5)查询中的计算表达式;6)出现次数和概率;7)其它可能的信息。
可选地,在另一实施例3中所述预定义引擎规则中的查询规则包括:查询语句中的数据计算公式规则、数据字段拼接规则、数据格式转换规则和数据比较条件规则。
需要说明的是,本实施例3是对上述实施例1或者实施例2的基础上进行的进一步地说明,预定义规则引擎规则是存储于规则库中,其可以添加和删除,而这些规则可能的规则包含但不局限于:数据计算,如sum(a*b+c);字段拼接,如concat(a,b);数据格式转换,如substr(a,1,10);复杂比较条件,如age>30and age<50;其它可能的查询模式。
可选地,如图2所示,在另一实施例4中所述S6中具体包括:
S61,复制一个所述当前OLAP预计算模型;
S62,根据所述新的查询表和所述新的虚拟查询信息,对复制的当前OLAP预计算模型进行创建,得到新的OLAP预计算模型;
S63,对所述新的OLAP预计算模型进行计算优化,将优化后的所述新的OLAP预计算模型替换所述当前OLAP预计算模型。
需要说明的是,本实施例4是在上述实施例1或者实施例2的基础上进行的进一步地说明,将当前OLAP预计算模型进行复制,得到一个新的OLAP预计算模型,主要是复制该OLAP预计算模型的定义和维度,然后用根据之前重新制作的查询表和虚拟查询信息,对这个复制模型进行创建,新模型创建后,通知OLAP平台对新模型加载并计算优化,将优化后的所述新的OLAP预计算模型替换所述当前OLAP预计算模型。
例如:某在线交易网站要以性别、年龄、城市等属性分析用户订单信息。于是创建了如下模型A:
输入表:ORDER,USER
维度:性别(sex),年龄(age),省(province),市(city)
度量:订单数,消费总金额
期望的查询语句样例如下:
SELECT sex,case when age>50then'Old'else then'Young'end as age_level,province,city,count(*),sum(price)from ORDER inner join USER on ORDER_USER_ID=USER.ID group by sex,age,province,city;
查询统计分析器发现,用户的大部分是这样的:
SELECT sex,case when age>50then'Old'else then'Young'end as age_level,province,city,count(*),sum(price)from ORDER inner join USER on ORDER_USER_ID=USER.ID group by sex,age,province,city;
这样的查询虽然也能够被模型A回答,但是由于有后计算,因而效率较低。模型优化器从规则引擎处发现此规则适用于模型优化,因此基于老模型和规则引擎,生成了改进后的模型A`,它使用USER`为输入表,替换了USER表;在USER`中,有age_level列,定义为上面的case when转换表达式:输入表:ORDER,USER`
维度:性别(sex),年龄层(age_level),省(province),市(city);
度量:订单数,消费总金额;
模型A`相比较于模型A,使用age_level维度替换了age维度。
可选地,在另一实施例5中所述新的查询表是真实存在的查询信息表或者在加载查询信息时动态创建的虚拟表。
需要说明的是,本实施例5是在上述实施例1或者实施例2上的进行的进一步说明的。
可选地,如图3所示,在另一实施例6中该方法还包括:
S7,重新获取新的查询语句,对所述新的查询语句进行识别,查找出所述新的查询语句中的所述不支持的特征查询信息;
S8,将所述不支持的特征查询信息转换成所述新的虚拟查询信息;
S9,将所述新的虚拟查询信息输入到所述新的OLAP预计算模型进行统计计算。
需要说明的是,本实施例6是在上述实施例1或者实施例2上的进行的进一步说明的,本实施例6是重新获取新的查询语句,查询改写器就会对这部分进行检测,当检测到新的查询语句已经在查询优化器改写,那么自动替换查询中这部分特征信息,将这部分特征信息为改写成新的虚拟查询信息,并将这些新的虚拟查询信息发送给新的OLAP模型。
通过上述实施例6的方法,将识别查询中的低效率的计算逻辑,转换成对新的虚拟的查询信息,这样既不需要改变查询语句,还大大提高了模型的查询效率,也提高了模型的实用性。
实施例7
如图4所示,本发明实施例7还涉及一种对OLAP预计算模型进行动态优化的系统,该系统包括:查询统计分析器、模型优化器、规则引擎库、统计数据库;
所述规则引擎库,用于预定义引擎规则,以及将所述预定义引擎规则提供给所述查询统计分析器在查询语句时使用的
所述查询统计分析器,用于接收用户输入的查询语句,根据预定义引擎规则分析所述查询语句中使用的查询信息,判断所述查询信息中是否有与所述预定义引擎规则中的查询规则相匹配的特征查询信息;
还用于当所述查询信息中有与所述预定义引擎规则中的查询规则相匹配的特征查询信息时,统计所述特征查询信息的出现次数,并将所述特征查询信息存储到所述统计数据库中;
所述模型优化器,用于根据所述预定义引擎规则,从所述特征查询信息中查找出当前OLAP预计算模型不支持的特征查询信息,将所述不支持的特征查询信息转换成新的虚拟查询信息;
还用于将所述新的虚拟查询信息添加到原始查询表中,形成新的查询表;以及还用于根据所述新的查询表和所述新的虚拟查询信息,创建新的OLAP预计算模型,并用所述新的OLAP预计算模型替换所述当前OLAP预计算模型。
需要说明的是,在本实施例7中是持续不断地收集和分析用户输入的查询语句,在规则引擎服务器(用于给管理员管理和扩充引擎规则的)中预先定义了引擎规则,查询统计分析器在获取到用户输入的查询语句后,就会调用存储在规则引擎服务器中预定义引擎规则对查询语句中使用的查询信息进行分析,再判断该查询信息中是否有与该预定义引擎规则中的查询规则相匹配的特征查询信息,比如:查询年龄段50-60岁,在查询规则中是否存在这样的50-60岁年龄段。
当检查到是匹配的时候,统计这些特征查询信息的出现次数,还要将这些特征查询信息存储进到统计数据库中,以便后续的使用,这个统计数据库是为了方便给系统管理员对数据进行可以管理或者扩充的。
接着,模型优化器就会根据统计分析器收集的信息,对在查询中频繁出现的、但没有直接被现有模型支持的特征查询信息进行转换(比如:查询使用的语句时50-60岁年龄段,而实际查询使用的是50岁,现有模型不支持50-60岁年龄段),将它们转换成新的虚拟属性,添加到新的查询表中;新的查询表可以是一张真实存在的表,也可以是一张在加载数据时动态创建的虚拟表;随后,基于当前OLAP预计算模型,使用新表和新属性,创建更新优化的模型。新模型创建后,通知OLAP平台对新模型加载并计算,完成后,替换当前OLAP预计算模型。
通过本实施例7中的对OLAP预计算模型进行优化的系统,创建新的OLAP预计算模型,这样可以提升查询效率,减少存储空间,对用户透明,且生成新的OLAP预计算模型,使得用户的查询无需再修改,该新的OLAP预计算模型动态解析查询,并将其转换成对新模型的访问,从而更高效地应对大数据上灵活复杂的分析场景。
可选地,在另一实施例8中所述查询信息包括:数据表格信息、维度信息、度量信息、查过滤条件信息、计算表达式信息、查询语句出现的次数和概率。
需要说明的是,本实施例8是对上述实施例7中的查询信息的细化说明如:1)查询用到的数据表格;2)查询用到的维度及其它信息;3)查询用到的度量及其它信息;4)查询用到的过滤条件;5)查询中的计算表达式;6)出现次数和概率;7)其它可能的信息。
可选地,在另一实施例9中所述预定义引擎规则中的查询规则包括:查询语句中的数据计算公式规则、数据字段拼接规则、数据格式转换规则和数据比较条件规则。
需要说明的是,本实施例9是对上述实施例7或者实施例8的基础上进行的进一步地说明,预定义规则引擎规则是存储于规则库中,其可以添加和删除,而这些规则可能的规则包含但不局限于:数据计算,如sum(a*b+c);字段拼接,如concat(a,b);数据格式转换,如substr(a,1,10);复杂比较条件,如age>30and age<50;其它可能的查询模式
可选地,在另一实施例10中所述模型优化器,用于根据所述新的查询表和新的虚拟查询信息,创建新的OLAP预计算模型,并将所述新的OLAP预计算模型替换所述当前OLAP预计算模型时,其具体用于复制一个所述当前OLAP预计算模型;根据所述新的查询表和所述新的虚拟查询信息,对复制的当前OLAP预计算模型进行创建,得到新的OLAP预计算模型;对所述新的OLAP预计算模型进行计算优化,并用优化后的所述新的OLAP预计算模型替换所述当前OLAP预计算模型。
需要说明的是,如图5所示,本实施例10是在上述实施例7或者实施例8上的进行的进一步说明的,本实施例10是重新获取新的查询语句,查询改写器就会对这部分进行检测,当检测到新的查询语句已经在查询优化器改写,那么自动替换查询中这部分特征信息,将这部分特征信息为改写成新的虚拟查询信息,并将这些新的虚拟查询信息发送给新的OLAP模型
通过上述实施例10的系统,将识别查询中的低效率的计算逻辑,转换成对新的虚拟的查询信息,这样既不需要改变查询语句,还大大提高了模型的查询效率,也提高了模型的实用性。
在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
机译: 新型OLAP预计算模型和产生预计算结果的方法
机译: 新型OLAP预计算模型及预计算结果生成方法
机译: 新型OLAP预计算模型及预计算结果生成方法