CN117807108A - 基于双查询引擎的数据查询方法 - Google Patents

基于双查询引擎的数据查询方法 Download PDF

Info

Publication number
CN117807108A
CN117807108A CN202410217260.8A CN202410217260A CN117807108A CN 117807108 A CN117807108 A CN 117807108A CN 202410217260 A CN202410217260 A CN 202410217260A CN 117807108 A CN117807108 A CN 117807108A
Authority
CN
China
Prior art keywords
query
field
mdx
data
star
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202410217260.8A
Other languages
English (en)
Inventor
吴华夫
汪润泽
肖熙
徐晓兰
黄志立
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangzhou Smart Software Co ltd
Original Assignee
Guangzhou Smart Software Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangzhou Smart Software Co ltd filed Critical Guangzhou Smart Software Co ltd
Priority to CN202410217260.8A priority Critical patent/CN117807108A/zh
Publication of CN117807108A publication Critical patent/CN117807108A/zh
Pending legal-status Critical Current

Links

Abstract

本申请涉及一种基于双查询引擎的数据查询方法,所述方法根据用户查询的目标字段确定基础字段,并确定出包含所述基础字段的若干个星型数据模型;根据所述查询的目标字段适配最佳的擅长处理的查询引擎,通过擅长处理的查询引擎根据所述若干个星型数据模型以及所述查询的目标字段进行查询,显著提高了数据查询的效率,给予用户更好的查询体验。

Description

基于双查询引擎的数据查询方法
技术领域
本申请涉及数据仓库技术领域,尤其涉及一种基于双查询引擎的数据查询方法。
背景技术
随着大数据时代的到来,大数据分析技术也越来越普及应用。通过快速获取、处理以及提取丰富的、多维度的业务数据并对其进行分析,可以获得有价值的信息辅助企业的生产和运营决策,从而助力企业的发展。目前在大数据领域涉及的技术包括数据仓库、数据安全、数据分析以及数据挖掘等等,这些技术在各个商业领域逐渐引起各行业内人士的关注。
在现有的大数据应用场景中,数据库存储和管理的数据规模庞大,往往达千亿甚至万亿级别,且数据的维度多,与此同时,用户的数据查询需求也越来越复杂,例如可能是查询二维表格明细数据,也可能查询多个维度和多个操作的数据等等,因此对于数据查询技术提出越来越高的要求,尤其是在查询效率方面。然而,现有技术在处理用户的查询请求时仍然不够高效及时,用户的查询效率低,需要一种提高数据查询效率的方法。
发明内容
基于此,本申请的目的在于,提供一种基于双查询引擎的数据查询方法,能够灵活切换到最佳的查询引擎以适配各种查询,提高数据查询的效率。
本申请实施例第一方面提供了一种基于双查询引擎的数据查询方法,包括以下步骤:
获取用户的报表查询请求;
解析所述报表查询请求得到查询的目标字段;根据所述目标字段确定基础字段;其中,所述目标字段包括基础字段和/或第一MDX操作字段,所述MDX操作字段绑定至少一个基础字段;
确定包含所述基础字段的若干个星型数据模型;其中,每个所述星型数据模型分别记录事实表、维度表以及记录各个数据表分别包含的基础字段;
若所述目标字段不包括第一MDX操作字段,通过SQL引擎根据所述目标字段以及各个所述星型数据模型确定第一SQL语句;根据所述第一SQL语句从预设的数据库中查询得到所述目标字段的查询结果;其中,所述第一SQL语句的查询字段根据所述目标字段确定,所述第一SQL语句的查询数据源根据各个所述星型数据模型确定;
若所述目标字段包括第一MDX操作字段,通过MDX引擎根据所述第一MDX操作字段获取对应的操作定义信息;根据各个所述星型数据模型以及所述操作定义信息,生成数据模型描述信息;根据所述报表查询请求以及所述操作定义信息,生成MDX语句;根据所述MDX语句以及所述数据模型描述信息,从预设的数据库中查询得到所述目标字段的查询结果。
本申请实施例所述的基于双查询引擎的数据查询方法,解析用户的报表查询请求得到查询的目标字段;根据所述目标字段确定基础字段,并确定出包含所述基础字段的若干个星型数据模型;若是所述目标字段不包括MDX操作字段,则通过SQL引擎进行数据查询,根据所述目标字段以及各个所述星型数据模型确定第一SQL语句;根据所述第一SQL语句从预设的数据库中查询得到所述目标字段的查询结果;若是所述目标字段包括MDX操作字段,则通过MDX引擎进行数据查询,根据所述MDX操作字段获取对应的操作定义信息;根据各个所述星型数据模型以及所述操作定义信息,生成数据模型描述信息;根据所述报表查询请求以及所述操作定义信息,生成MDX语句;根据所述MDX语句以及所述数据模型描述信息,从预设的数据库中查询得到所述目标字段的查询结果。通过本申请的方法,实现了灵活适配最佳的擅长处理的查询引擎,通过擅长处理的引擎来处理对应类型的查询请求,显著提高了数据查询的效率,给予用户更好的查询体验。
为了更好地理解和实施,下面结合附图详细说明本申请。
附图说明
图1为本申请实施例的基于双查询引擎的数据查询方法的流程示意图;
图2为本申请例子中从星座数据模型中确定星型数据模型的示意图;
图3为本申请例子中维度表经过裁剪后星型数据模型的示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施例做进一步地详细描述。其中,下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。
应当明确,以下描述的实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。基于本申请实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本申请保护的范围。
在本申请使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请。在本申请中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。此外,在本申请的描述中,除非另有说明,“多个”是指两个或两个以上。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合,例如,A 和/或 B,可以表示:单独存在 A,同时存在A和B,单独存在B这三种情况;字符“/”一般表示前后关联对象是一种“或”的关系。
应当理解,尽管在本申请可能采用术语第一、第二、第三等来描述各种信息,但这些信息不应限于这些术语,而且,这些术语仅用来区别类似的对象,而不必用于描述特定的顺序或先后次序,也不能理解为指示或暗示相对重要性。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本申请中的具体含义。取决于语境,本申请所使用的词语“如果”/“若”可以被解释成为“在……时”或“当……时”或“响应于确定”。
本申请涉及数据仓库技术领域,在现有的大数据应用场景中,数据库存储和管理的数据规模庞大,往往达千亿甚至万亿级别,且数据的维度多,与此同时,用户的数据查询需求也越来越复杂,例如可能是查询二维表格明细数据,也可能查询多个维度和多个操作的数据等等,因此对于数据查询技术提出越来越高的要求,尤其是在查询效率方面。然而,现有技术在处理用户的查询请求时仍然不够高效及时,用户的查询效率低,需要一种提高数据查询效率的方法。
基于此,考虑到现有的数据查询引擎主要分为SQL(Structured Query Language,结构化查询语言)引擎和MDX (MultiDimensional Expression,多维表达式)引擎两类,SQL引擎擅长处理二维表格数据,但是缺乏多维分析能力;而MDX引擎比较适合处理自由组合维度的数据分析,但是在查询大数据量的二维表格明细数据时效率又比较差。本申请实施例提供一种基于双查询引擎的数据查询方法,能够灵活切换到最佳的查询引擎以适配各种查询,提高数据查询的效率。
请参考图1,本申请实施例提供了一种基于双查询引擎的数据查询方法,包括以下步骤:
S101:获取用户的报表查询请求;
S102:解析所述报表查询请求得到查询的目标字段;根据所述目标字段确定基础字段;其中,所述目标字段包括基础字段和/或第一MDX操作字段,所述MDX操作字段绑定至少一个基础字段;
S103:确定包含所述基础字段的若干个星型数据模型;其中,每个所述星型数据模型分别记录事实表、维度表以及记录各个数据表分别包含的基础字段;
S104:若所述目标字段不包括第一MDX操作字段,通过SQL引擎根据所述目标字段以及各个所述星型数据模型确定第一SQL语句;根据所述第一SQL语句从预设的数据库中查询得到所述目标字段的查询结果;其中,所述第一SQL语句的查询字段根据所述目标字段确定,所述第一SQL语句的查询数据源根据各个所述星型数据模型确定;
S105:若所述目标字段包括第一MDX操作字段,通过MDX引擎根据所述第一MDX操作字段获取对应的操作定义信息;根据各个所述星型数据模型以及所述操作定义信息,生成数据模型描述信息;根据所述报表查询请求以及所述操作定义信息,生成MDX语句;根据所述MDX语句以及所述数据模型描述信息,从预设的数据库中查询得到所述目标字段的查询结果。
本申请实施例所述的基于双查询引擎的数据查询方法,解析用户的报表查询请求得到查询的目标字段;根据所述目标字段确定基础字段,并确定出包含所述基础字段的若干个星型数据模型;若是所述目标字段不包括MDX操作字段,则通过SQL引擎进行数据查询,根据所述目标字段以及各个所述星型数据模型确定第一SQL语句;根据所述第一SQL语句从预设的数据库中查询得到所述目标字段的查询结果;若是所述目标字段包括MDX操作字段,则通过MDX引擎进行数据查询,根据所述MDX操作字段获取对应的操作定义信息;根据各个所述星型数据模型以及所述操作定义信息,生成数据模型描述信息;根据所述报表查询请求以及所述操作定义信息,生成MDX语句;根据所述MDX语句以及所述数据模型描述信息,从预设的数据库中查询得到所述目标字段的查询结果。通过本申请的方法,实现了灵活适配最佳的擅长处理的查询引擎,通过擅长处理的引擎来处理对应类型的查询请求,显著提高了数据查询的效率,给予用户更好的查询体验。
本申请实施例所述的基于双查询引擎的数据查询方法的执行主体为计算机,具体的,其可以应用于商业智能系统(BI系统),用于处理用户的数据查询请求。
首先,对本申请实施例中的有关概念进行说明。
本申请实施例中,用户的查询请求可以包括多种类型,具体的,可以包括报表查询请求以及明细数据查询请求,其中,报表查询请求通常不仅涉及查询数据库中的原生字段(基础字段)的原生数据,还可能涉及聚合计算,以及还可能涉及多维分析等等;明细数据查询请求则仅仅是针对原生字段的数据查询。具体的,对于报表查询请求以及明细查询请求的区分,可以通过不同携带不同的查询标识进行区分,或者在某一种查询请求中携带特定查询标识而另一种则不携带特定查询标识,从而根据有无特定查询标识进行区分。
当然,在不考虑明细数据查询的情况下,对于所述报表查询请求应当做出更宽泛的解释——其实质就是一种数据查询请求。
本实施例中,解析查询请求得到用户想要查询的目标字段,具体在不同类型的查询请求(报表查询或明细数据查询)中,解析得到的目标字段一般有所不同。本实施例中针对报表查询请求解析得到的目标字段,包括基础字段和/或第一MDX操作字段。一般而言,所述报表查询请求查询的目标字段至少包括基础字段,此外还可以包括第一MDX操作字段,其中,若是包括第一MDX操作字段,则所述第一MDX操作字段还会绑定有至少一个基础字段——即所述第一MDX操作字段指定了对绑定的基础字段的操作。
其中,基础字段一般是数据库中记录原始的业务数据的字段。更具体的,所述基础字段一般划分为度量字段和维度字段。
所述度量字段一般是指事实表中的字段,所述维度字段一般是指维度表中的字段。
其中,所述事实表和所述维度表是数据仓库领域的数据建模中的概念,目前在数据仓库领域的主要涉及的数据模型有星型数据模型、在星型数据模型基础上产生的雪花数据模型(实质也可以认为是星型数据模型的一种)以及星座数据模型。其中,在星型数据模型中包括一个位于中心的数据表以及其他与中心数据表连接的数据表,其中,中心的数据表为事实表,而与之连接的其他数据表则为维度表。一般而言,在一个复杂的星座数据模型中,若是以不同的数据表为中心,便可以确定不同的星型数据模型,一个数据表可以在某个星型数据模型中作为事实表,也可以在其他星型数据模型中作为维度表。在一个实施例中,可以事先对于用户可以查询的字段分别按照“度量字段类别”和“维度字段类别”进行分类并存储在数据库中,从而当接收到用户的查询请求,获取用户查询的目标字段并根据目标字段确定基础字段时,可以根据预设的分类进行判断所述基础字段是否为度量字段或维度字段。在另一个实施例中,可以在用户进行查询操作的前端系统中为不同的基础字段添加不同的标识,从而后台根据度量字段标识确定基础字段为度量字段,根据维度字段标识确定基础字段为维度字段(同理,对于本申请实施例中出现的各种字段,包括基础字段和MDX操作字段,都可以通过添加不同的字段类型标识,从而确定出字段是何种类型的字段)。
其中,MDX操作字段并非数据库中记录的原生字段,而是通过定义得到的字段,其查询的数据是基于数据库中基础字段的数据进行复杂操作(例如复杂的计算)得到的。具体的,可以根据数据分析的需要,定义各种操作的MDX操作字段。
具体在一个实施例中,MDX操作字段可以是“同期”、“前期”、“同比”、“环比”、“全局占比”、“组内占比”、“全局排名”以及“组内排名”,等等。显然,对于MDX操作字段的查询涉及对基础字段的数据进行多个维度的计算或比较,不像查询基础字段那样仅需要从数据库中将基础字段对应的数据获取出来,而是需要更复杂的涉及多个维度和/或多种基础数据的分析处理。
以下对本申请实施例所述基于双查询引擎的数据查询方法的各个步骤进行详细说明。
对于步骤S101,获取用户的报表查询请求。
本实施例中,所述报表查询请求是用户在前端系统的报表查询界面操作后发送的查询请求。
在一个实施例中,步骤S101所述获取用户的报表查询请求的步骤,包括:
步骤S1011:获取用户的查询请求,若所述用户的查询请求包括预设的明细查询标识,确定所述用户的查询请求为明细查询请求,否则确定为报表查询请求。
本实施例中,解析用户的查询请求,若是未携带预设的明细查询标识,则判断该查询请求为报表查询请求。
相应的,在一个实施例中,若是查询请求携带明细查询标识,则判断为明细查询请求。对于明细查询请求的处理不同于报表查询请求,在一个实施例中,所述方法还包括步骤:
步骤S201:若所述用户的查询请求为明细查询请求,确定通过SQL引擎进行数据查询;
步骤S202:解析所述明细查询请求得到查询的基础字段;
步骤S203:确定包含所述基础字段的若干个第二星型数据模型;
步骤S204:通过SQL引擎根据查询的基础字段以及各个所述第二星型数据模型生成第三SQL语句;根据所述第三SQL语句从所述预设的数据库中查询得到所述基础字段的查询结果;其中,所述第三SQL语句的查询字段根据所述查询的基础字段确定,所述第三SQL语句的查询数据源根据各个所述第二星型数据模型确定。
也就是说,若是用户的查询请求是明细查询请求,则直接确定采用SQL引擎进行数据查询,并且解析明细查询请求得到的查询字段也会是基础字段(即使包括非基础字段,也仅确定基础字段为有效的目标字段),此外,对于其中相关步骤的具体实现,可参考报表查询请求中对应的有关步骤的说明——即如何确定星型数据模型,以及如何通过SQL引擎进行查询。
对于步骤S102,解析所述报表查询请求得到查询的目标字段;根据所述目标字段确定基础字段。
本步骤解析报表查询请求得到查询的目标字段,其中,目标字段可能仅包括基础字段,或仅包括第一MDX操作字段,也可能包括基础字段和第一MDX操作字段。若是查询的目标字段包括第一MDX操作字段,则第一MDX操作字段还会绑定有基础字段,需要说明的是,这种情况下,第一MDX操作字段是查询的目标字段,但与其绑定的基础字段并不是查询的目标字段,例如查询请求查询“销售量”的“同期增长率”,其中,“同期增长率”是查询的目标字段,而“销售量”只是目标字段引用的基础字段,最终查出来应当是“同期增长率”的查询结果,而不包括将“销售量”字段的数据查出来。
本步骤根据所述目标字段确定与查询有关的基础字段(同上述,不一定是查询的目标字段),从而在步骤S103中可以根据基础字段确定与本次查询有关的星型数据模型。具体的,若是查询的目标字段本就是基础字段,那么其便是与查询有关的基础字段;若是查询的目标字段是MDX操作字段,则其绑定的基础字段便是与查询有关的基础字段。在一些特殊情况下,还有一类聚合字段,这类字段与基础字段关联,则其确定的关联的基础字段便是与查询有关的基础字段,例如“销售量平均值”这一聚合字段,则“销售量”字段为查询有关的基础字段。
在一个实施例中,所述第一MDX操作字段包括用户自定义操作字段和预定义操作字段。
其中,预定义操作字段是预先定义的MDX操作字段,在后台预先存储有其对应的定义公式,可以直接根据定义公式以及查询时绑定的基础字段,生成其操作定义信息。
其中,用户自定义操作字段是用户在操作查询的前端系统中构建的MDX操作字段(并构建了该MDX操作字段的MDX操作定义公式),后台在接收到包含用户自定义操作字段的查询请求时,也将解析得到与用户自定义操作字段绑定的基础字段以及用户自定义的MDX操作定义公式,同理,根据其绑定的基础字段以及MDX操作定义公式,生成其操作定义信息。
其中,所述操作定义信息用于定义MDX操作字段对应的操作处理方式,也可以说是定义了对MDX操作字段绑定的基础字段的数据进行何种操作。
在一个例子中,预定义操作字段为“同期增长率”,用户在查询时选中了“销售量”这一度量字段,并选中其“时间”维度字段的参数为2024年,另外选中了“同期增长率”这一MDX操作字段,递交查询,那么,后台在处理该查询时,根据“同期增长率”获取对应的定义公式,例如“同期增长率=(当期数据-前期数据)/前期数据”,并将具体的基础字段(度量字段和/或维度字段)以及有关的参数代入定义公式中便可得到该查询的“同期增长率”的操作定义信息,例如“同期增长率=(2024年销售量-2023年销售量)/2023年销售量”。当然,本例子仅为示意性说明,以便于理解MDX操作字段以及其操作定义信息,至于具体实现细节可根据情况设定。
本实施例中,所述报表查询请求不仅包含查询的目标字段,其一般还包含与查询有关的其他参数,在一个实施例中,解析所述报表查询请求还得到查询限制信息,所述查询限制信息用于对用户的查询进行限定,包括限定数据查询的范围或者限定对查询的数据进行过滤的条件,具体的限定形式可根据情况设定。
本步骤中解析所述报表查询请求得到查询的目标字段的过程中,若是涉及MDX操作字段,则还涉及对MDX操作字段的相关处理,具体的,在本实施例中,将第一MDX操作字段划分包括静态属性的第一MDX操作字段和动态属性的第一MDX操作字段。两种属性的第一MDX操作字段将在后续实施例中执行不同的处理,具体参见后续说明。
在一个实施例中,步骤S102所述解析所述报表查询请求得到查询的目标字段的步骤之后,还包括:
步骤S1021,若解析所述报表查询请求还得到用户自定义操作字段、与所述用户自定义操作字段绑定的基础字段以及MDX操作定义公式,根据所述用户自定义操作字段绑定的基础字段以及所述MDX操作定义公式,确定所述用户自定义操作字段对应的操作定义信息;在操作定义数据集中记录所述用户自定义操作字段、所述用户自定义操作字段对应的操作定义信息,以及记录所述用户自定义操作字段的属性信息为动态属性;
步骤S1022,若解析所述报表查询请求还得到预定义操作字段、与所述预定义操作字段绑定的基础字段以及快速查询标识,则根据所述预定义操作字段,从预设的操作定义公式库中获取对应的第一操作定义公式,根据所述预定义操作字段绑定的基础字段以及所述第一操作定义公式,确定所述预定义操作字段对应的操作定义信息;在操作定义数据集中记录所述预定义操作字段、所述预定义操作字段对应的操作定义信息,以及记录所述预定义操作字段的属性信息为静态属性;其中,所述预设的操作定义公式库中存储若干预定义操作字段以及对应的操作定义公式;
步骤S1023,若解析所述报表查询请求还得到预定义操作字段、与所述预定义操作字段绑定的基础字段,且未解析到快速查询标识与所述预定义操作字段绑定,则根据所述预定义操作字段,从所述操作定义公式库中获取对应的第二操作定义公式,根据所述预定义操作字段绑定的基础字段以及所述第二操作定义公式,确定所述预定义操作字段对应的操作定义信息;在操作定义数据集中记录所述预定义操作字段、所述预定义操作字段对应的操作定义信息,以及记录所述预定义操作字段的属性信息为动态属性。
其中,所述操作定义数据集可以是预先创建,用于在每次解析查询请求得到MDX操作字段时,存储MDX操作字段及其操作定义信息和属性信息;也可以是临时创建,在每次解析查询请求得到MDX操作字段时,才进行创建并存储MDX操作字段及其操作定义信息和属性信息。
本实施例中,提供了三种报表查询请求的处理方式,分别是步骤S1021、步骤S1022以及步骤S1022这三种情形,其分别对应的是用户在前端查询界面中的三种查询方式:1.用户自定义MDX操作字段进行查询;2.用户使用界面上预设的预定义操作字段进行查询(这种查询方式为快速查询的方式);3.用户基于预设的预定义操作字段构建了查询组件(组件中包含用户指定的基础字段和预定义操作字段,创建了该查询组件之后,便可以在各种查询中直接加入该查询组件,从而复用该查询组件内的设定),并使用了查询组件进行查询。
针对这三种情形,在解析得到用户自定义操作字段或预定义操作字段,将用户自定义操作字段或预定义操作字段确定为查询的目标字段之后,还在操作定义数据集中记录用户自定义操作字段或预定义操作字段,及其对应的操作定义信息,以及记录其属性信息。对于属性信息的确定,在本实施例中,针对于第2种查询中绑定快速查询标识的MDX操作字段,其属性信息记为静态属性,针对其他查询情形中的MDX操作字段,则将属性信息记录为动态属性。对于两者属性的MDX操作字段的区别、对应的处理方式的差异,将在后续对应的步骤进行说明。
对于步骤S103,确定包含所述基础字段的若干个星型数据模型;其中,每个所述星型数据模型分别记录事实表、维度表以及记录各个数据表分别包含的基础字段。
本步骤根据步骤S102确定的基础字段,确定包含所述基础字段的若干个星型数据模型。其中,所述若干个星型数据模型可能是一个或多个,若是一个,则其包含全部的所述基础字段,而如果没法满足在一个星型数据模型中包含全部的所述基础字段,则只能在多个星型数据模型,分别包含部分的所述基础字段。
所述星型数据模型可以是预先设定的,在模型数据库中存在若干个星型数据模型;也可以是从一个更大的星座数据模型中确定的。
在本实施例中,所述星型数据模型是从预设的星座数据模型中确定的,其中,所述星座数据模型是事先基于数据库存储的各个数据表建立起来的数据逻辑层,其中记录若干个数据表、各个数据表包含的基础字段以及各个数据表的图关系。也就是说,所述星型数据模型并不记录各个数据表的字段的具体业务数据,而是仅仅记录了用于生成查询语句的有关信息,这些信息主要包括数据表的表名以及数据表的字段信息,此外,所述星座数据模型中建立了各个数据表之间的图关系。其中,所述图关系至少包括有向图关系。
其中,从星座数据模型中确定星型数据模型的主要目标是得到与查询有关的最小可用的星型数据模型,所述最小可用的星型数据模型中应当仅包含与查询有关的数据表,数据表中应当仅包含步骤S102确定的基础字段,其中,所述与查询有关的数据表分为几种情况:对于维度表,仅在其包含所述基础字段或者绑定了查询有关的限制信息时,才认为是与查询有关的数据表;对于事实表则不限定,一般而言,事实表是一个星型数据模型中必要存在的数据表,即使其不包含基础字段。
确定最小可用星型数据模型的方式可以有多种,本申请通过以下实施例进行说明。
在一个实施例中,步骤S103所述确定包含所述基础字段的若干个星型数据模型,包括以下步骤:
步骤S1031,根据所述基础字段,确定预设的星座数据模型中至少一个数据表为目标数据表;
步骤S1032,以任一所述目标数据表为根节点,根据所述图关系,确定所述星座数据模型中能够到达所述目标数据表的其他数据表,分别以各个所述目标数据表为事实表、以所述事实表对应能够到达的所述其他数据表为维度表,获得若干个星型数据模型。
步骤S1033,将任一所述目标星型数据模型中不包括所述维度字段的边缘的维度表去除,将任一所述目标星型数据模型的事实表中除所述度量字段之外的基础字段去除,以及将任一所述星型数据模型的维度表中除所述维度字段之外的基础字段去除。
其中,步骤S1032所述能够到达所述目标数据表,即是指沿着图关系中的路径可以到达所述目标数据表。
具体请参考图2,图2示意了一个从星座数据模型中确定星型数据模型的例子,其中,图2中a表示原始的星座数据模型,A-F的各个节点分别表示数据表,本例子以数据表A为根节点(目标数据表),则确定的星型数据模型即为图2中b所示的星型数据模型,在该星型数据模型中,数据表A为事实表,数据表B、C、F、E为维度表(对于数据表C和E一般也称为雪花维)。其中,数据表E和F原本在星座数据模型中为双向关系,而在确定了星型数据模型后,将仅保留以数据表A为中心的方向关系,即数据表E指向数据表F(数据表F指向数据表A)。也就是说,本申请实施例所确定的星型数据模型中,均是以事实表为中心,事实表以及其他维度表之间即使原本具有双向关系,也将仅保留(直接或间接)指向中心事实表的方向。基于此,在一个实施例中,便可以根据星型数据模型中数据表的方向关系,区分各个数据表分别是事实表还是维度表。
其中,步骤S1033所述边缘的维度表是指星型数据模型中处在边缘的维度表,例如在图2中b的星型数据模型中,维度表C和E便是边缘的维度表。进一步地,假设维度表C去除,则维度表B将成为边缘的维度表,以此类推。
也就是说,本实施例根据基础字段,确定星座数据模型中的目标数据表,并以目标数据表为中心的事实表,以能够到达所述事实表的其他数据表为维度表,确定若干个星型数据模型;去除各个星型数据模型中与查询无关的维度表,以及去除与查询无关的基础字段,从而最终得到的星型数据模型仅包括与查询有关的事实表、维度表以及基础字段,即为得到最小可用星型数据模型。
其中需要说明的是,所述基础字段可能同时包括度量字段和维度字段,也可能仅包括度量字段,还可能仅包括维度字段,在不同的情况下,步骤S1031中根据所述基础字段确定所述星座数据模型的目标数据表的步骤的具体执行将有所不同。
具体在一个实施例中,若所述基础字段仅包括度量字段,步骤S1031所述根据所述基础字段,确定预设的星座数据模型中至少一个数据表为目标数据表的步骤,包括:
步骤S10311,确定预设的星座数据模型中包含任意一个或多个所述度量字段的至少一个数据表为目标数据表;
若所述基础字段仅包括维度字段,步骤S102所述根据所述基础字段,确定预设的星座数据模型中至少一个数据表为目标数据表的步骤,包括:
步骤S10312,确定所述星座数据模型中的各个数据表为目标数据表。
也就是说,在本申请实施例中,若是所述基础字段包括度量字段,则从星座数据模型中找到一个包含任意一个或多个所述度量字段的数据表,并以之为目标数据表,确定出星型数据模型,之后再对星型数据模型进行裁剪,去除与查询无关的数据表和基础字段。
而若是所述基础字段不包括度量字段,仅包括维度字段,则本次查询主要针对维度表的数据,因此,分别以星座数据模型的各个数据表为目标数据表,确定出对应的各个星型数据模型,例如星座数据模型具有10个数据表,则分别以每个数据表为目标数据表可确定10个星型数据模型。当然,在此种情况下,还需要进一步地从所有的星型数据模型中确定包含任意所述维度字段的星型数据模型,具体的,在步骤S10312之后,还需要确定存在维度表包含所述维度字段的星型数据模型,也就是说,若是某个星型数据模型不存在维度表包含所述维度字段,则舍弃该星型数据模型;之后才是对最终确定下来的星型数据模型中无关的维度表以及无关的基础字段进行去除。
在一个实施例中,步骤S1032所述分别以各个所述目标数据表为事实表、以所述事实表对应能够到达的所述其他数据表为维度表,获得若干个星型数据模型的步骤之后,包括步骤:
确定各个所述星型数据模型的维度表绑定的用户的查询限制参数;
步骤S1033所述将任一所述星型数据模型中不包括所述维度字段的边缘的维度表去除的步骤,包括:
将任一所述目标星型数据模型中不包含任一所述维度字段且不绑定查询限制参数的边缘的维度表去除。
请参考图2和图3,在一种情况中,假设图2中b的星型数据模型中,维度表B和F包含查询到维度字段,而维度表C和E不包含任一本次查询的维度字段且不绑定用户的查询限制参数,则维度表C和E将从星型数据模型中去除,得到图3的星型数据模型。在另一情况中,假设维度表B、C、E包含查询的维度字段,而维表F不包含查询的维度字段且不绑定用户的查询限制参数,则星型数据模型仍然为图2中b所示,不会去除维度表F和E。
也就是说,本实施例中,在确定与本次查询无关的维度表时,不仅考虑到维度表是否包括维度字段以及是否位于边缘,还要考虑到是否绑定查询限制参数,若是绑定了查询限制参数,则即使位于边缘且不包括维度字段,也应当保留。从而避免裁剪掉与查询有关的维度表。
在一个实施例中,若步骤S102解析所述报表查询请求还得到查询限制信息,所述查询限制信息包括度量字段以及与所述度量字段绑定的维度字段和/或第二MDX操作字段,步骤S103所述确定包含所述基础字段的若干个星型数据模型的步骤之后,还包括步骤:
步骤S401,若所述目标字段包括第一MDX操作字段,确定通过MDX引擎进行数据查询;
步骤S402,若所述目标字段不包括第一MDX操作字段,但,所述若干个星型数据模型包括所述查询限制信息的度量字段,且所述查询限制信息包括第二MDX操作字段,确定通过MDX引擎进行数据查询;
步骤S403,若所述目标字段不包括第一MDX操作字段,但,所述若干个星型数据模型包括所述查询限制信息的度量字段,且所述查询限制信息不包括第二MDX操作字段,确定通过SQL引擎进行数据查询;
步骤S404,若所述目标字段不包括第一MDX操作字段,但,所述若干个星型数据模型不包括所述查询限制信息的度量字段,确定通过SQL引擎进行数据查询。
其中,所述查询限制信息是用户设置的限定查询数据范围的信息,其中包括度量字段以及与所述度量字段绑定的维度字段和/或第二MDX操作字段,所述度量字段是查询限制信息限制的目标数据,维度字段以及第二MDX操作字段则是定义了具体进行何种限制,例如维度字段绑定参数“区域=广东”,则将度量字段的数据限制在“广东”区域范围之内,例如所述第二MDX操作字段定义了“近3个月的平均值”(此处仅为示意性说明,具体实现时为具体的参数和关系式),则限制了度量字段的数据在近3个月的时间范围之内并且限定了对这些数据计算平均值。
本实施例中,若是报表查询请求还解析得到查询限制信息,则在确定若干个星型数据模型之后,通过判断星型数据模型是否包含查询限制信息的度量字段,从而判断查询限制信息是否有效,这是由于星型数据模型记录了与查询请求有关的数据表和基础字段,查询限制信息的度量字段不在任一星型数据模型中,显然这一限制的对象与本次查询的数据无关,不产生限制作用,可以直接丢弃该查询限制信息,不对之进行处理。而若是查询限制信息的度量字段在任一个星型数据模型中,则查询限制信息是有效的限制,需要考虑查询限制信息是否涉及MDX操作字段,从而在确定查询引擎时,需要结合查询限制信息进行确定。
其中,对于步骤S402的情形,在确定所述查询限制信息有效并且包括第二MDX操作字段后,相应的,需要将查询限制信息中的第二MDX操作字段、第二MDX操作字段对应的操作定义信息记录到操作定义数据集中,并记录其属性信息。在本实施例中,查询限制信息中的第二MDX操作字段的属性信息统一记录为动态属性,在其他实施例中,也可以根据情况记录为动态属性或静态属性。从而在生成MDX语句时可以确定对应的查询定义信息。其中,由于所述目标字段不包括第一MDX操作字段,通过MDX引擎进行数据查询时,显然不存在根据第一MDX操作字段获取对应的操作定义信息的步骤,而应当是根据所述第二MDX操作字段获取对应的操作定义信息,除此之外,后续步骤同理,不作赘述。
对于步骤S104,若所述目标字段不包括第一MDX操作字段,通过SQL引擎根据所述目标字段以及各个所述星型数据模型确定第一SQL语句;根据所述第一SQL语句从预设的数据库中查询得到所述目标字段的查询结果。
在本实施例中SQL语句以及MDX语句是语法结构相似的查询语句,在SQL语句或MDX语句中,一般格式是:select 查询字段 from 查询数据源;当存在需要定义的字段时,查询语句在select字段之前还包括“with 字段操作定义”;当存在需要限定的查询限制条件时,查询语句在from字段之后还包括“where查询限制条件”。
也就是说,在生成一个查询语句时,至少需要确定查询字段和查询数据源,其中,查询字段用于指定用户所要查询的目标字段,查询数据源一般指定用户所要查询的目标数据库的目标数据表,因此其一般是填写数据表的表名,在一些情况中,其也可以是填写另一条查询语句(该查询语句实质上确定了一组数据,也可认为这组数据构成数据表)。
其中,本实施例所述预设的数据库包括星座数据模型对应的各个数据表的数据。即,所述预设的数据库实际上便是星座数据模型建模的基础。在一个实施例中,所述预设的数据库优选为OLAP(On-Line Analytical Processing)数据库。
在一个实施例中,任一所述星型数据模型的数据表不包含所述目标字段的基础字段之外的其他字段;步骤S104所述根据所述目标字段以及各个所述星型数据模型确定第一SQL语句的步骤,包括:
步骤S1041,根据任一所述星型数据模型中的基础字段确定对应的第一查询字段;
步骤S1042,根据任一所述星型数据模型中的事实表确定对应的第一查询数据表;
步骤S1043,根据任一所述星型数据模型中不绑定查询限制参数的维度表确定对应的第二查询数据表;其中,所述查询限制参数用于限制用户的查询范围;
步骤S1044,根据任一所述星型数据模型中绑定查询限制参数的维度表确定对应的第三查询数据表;其中,所述第三查询数据表根据所述绑定查询限制参数的维度表及其绑定的查询限制参数确定;
步骤S1045,将任一所述目标星型数据模型对应的所述第一查询数据表与对应的各个所述第二查询数据表依次进行左连结,并与对应的各个所述第三查询数据表依次进行内连结,得到对应的第四查询数据表;
步骤S1046,根据任一所述星型数据模型对应的所述第一查询字段以及所述第四查询数据表,生成对应的第二SQL语句;
步骤S1047将各个所述星型数据模型对应的第二SQL语句进行全连结或左连结,得到第三SQL语句;
步骤S1048,根据所述目标字段确定所述第一SQL语句的查询字段;
步骤S1049,根据所述第三SQL语句确定所述第一SQL语句的查询数据源。
本实施例中,直接根据星型数据模型以及查询的目标字段生成SQL查询语句——具体的,在星型数据模型中,记录了与本次查询有关的主要的数据表、基础字段以及查询限制参数,根据星型数据模型包含的基础字段便可以确定与目标字段有关的基础数据,根据星型数据模型包含的数据表便可确定本次查询有关的数据表。其中,数据表可能包括三种:一种是事实表,一种是不绑定查询限制参数的维度表,一种是绑定查询限制参数的维度表。对于第一种和第二种,可以确定其数据表便分别为第一查询数据表和第二查询数据表,对于第三种,则根据该绑定查询限制参数的维度表及其绑定的查询限制参数确定第三查询数据表。可以理解的是,基于查询限制参数是用于限制查询语句的查询范围,故所述第三查询数据表是用于限制查询语句的查询范围的数据表——具体的,便是通过将第三查询数据表连结到第一查询数据表和第二查询数据表的方式,实现将查询的最终数据表中的字段数据进行限制或过滤,使得连结后得到的第四查询数据表中,限定了字段的范围或者不包含限制查询的字段。当然,若是不存在绑定查询限制参数的维度表,则不必确定所述用于限制查询语句的查询范围的第三查询数据表,从而仅需要将所述第一查询数据表和所述第二查询数据表进行连结得到所述第四查询数据表。
本实施例中,在分别将各个所述目标星型数据模型对应的所述第一查询数据表、所述第二查询数据表以及所述第三查询数据表进行连结时,其中的连接条件可根据情况设定,具体的,可以通过字段匹配,将连结的两个数据表之间共同的字段作为连接条件,也可以根据用户设置的连接条件进行连接,对此可不作限制。
对于步骤S1041-步骤S1046如何生成第二SQL语句,具体以一个例子进行说明:假设星型数据模型包含事实表t0以及3个维度表t1、t2、t3,其中事实表t0仅包含一个“数量”字段,维度表t1包含“类别”字段,维度表t2包含“产地”字段,维度表t3不包含字段但是绑定了查询限制参数为“时间=12月”,则据此星型数据模型生成的查询语句为:select t0.数量,t1.类别,t2.产地 from t0 left join t1 on 连接条件 left join t2 on 连接条件inner join (select * from t3 where 时间=12月) t3 on 连接条件。
对于步骤S105,若所述目标字段包括第一MDX操作字段,通过MDX引擎根据所述第一MDX操作字段获取对应的操作定义信息;根据各个所述星型数据模型以及所述操作定义信息,生成数据模型描述信息;根据所述报表查询请求以及所述操作定义信息,生成MDX语句;根据所述MDX语句以及所述数据模型描述信息,从预设的数据库中查询得到所述目标字段的查询结果。
关于本步骤,首先需要理解MDX引擎,在本实施例中,MDX引擎是指多维查询引擎,具体可参考Mondrian引擎(基于Java开发的开源的联机分析处理引擎)的工作原理。在MDX引擎中,其需要结合数据模型描述信息以及MDX语句进行查询,具体的,所述数据模型描述信息一般是Schema XML(Extensible Markup Language,可扩展标记语言)文件,其中描述了一个数据模型cube(数据立方体)的数据库表描述信息、度量描述信息、维度描述信息、MDX操作字段描述信息(包括计算成员描述信息和/或命名集描述信息);所述MDX语句的查询数据源便确定为所述数据模型描述信息中定义的模型名称(一般而言,Schema XML定义模型名称为cube,MDX语句中对应为from cube)。
在MDX引擎中,对于一个MDX操作字段,需要对应的操作定义信息(例如计算公式),才能执行相应的操作。具体的,MDX操作字段的定义,可以是在MDX语句的with部分进行定义,也可以是在数据模型描述信息(Schema XML文件)中进行定义。
本实施例中,所述MDX引擎是基于一般的多维分析引擎例如Mondrian引擎进行二次开发得到的多维查询引擎,即,其不仅仅像一般的多维分析引擎一样根据MDX语句和数据模型描述信息执行查询,在此之前还执行生成MDX语句以及生成数据模型描述信息的工作。
在一个实施例中,步骤S105所述通过MDX引擎根据所述第一MDX操作字段获取对应的操作定义信息的步骤,包括:
步骤S1051,根据所述第一MDX操作字段的预设的属性信息,确定所述第一MDX操作字段为静态属性的第一MDX操作字段或动态属性的第一MDX操作字段;
步骤S1052,获取静态属性的第一MDX操作字段的操作定义信息;
步骤S1053,获取动态属性的第一MDX操作字段的操作定义信息;
所述根据各个所述星型数据模型以及所述操作定义信息,生成数据模型描述信息的步骤,包括:
步骤S1054,根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成数据模型描述信息;
所述根据所述报表查询请求以及所述操作定义信息,生成MDX语句的步骤,包括:
步骤S1055,根据所述报表查询请求以及动态属性的第一MDX操作字段的操作定义信息,生成MDX语句。
本实施例中,对于不同属性的第一MDX操作字段分别进行不同的处理,其中,对于静态属性的第一MDX操作字段,将在数据模型描述信息中描述其操作定义信息,对于动态属性的第一MDX操作字段,则是在MDX语句中描述其操作定义信息(即在MDX语句的with部分进行定义)。
其中,在一个实施例中,步骤S1051所述根据所述第一MDX操作字段的预设的属性信息,确定所述第一MDX操作字段为静态属性的第一MDX操作字段或动态属性的第一MDX操作字段的步骤,包括:
根据所述操作定义数据集中记录的所述第一MDX操作字段的属性信息,确定所述第一MDX操作字段为静态属性的第一MDX操作字段或动态属性的第一MDX操作字段;
步骤S1052所述获取静态属性的第一MDX操作字段的操作定义信息的步骤,包括:
根据所述操作定义数据集,获取静态属性的第一MDX操作字段的操作定义信息;
步骤S1053所述获取动态属性的第一MDX操作字段的操作定义信息的步骤,包括:
根据所述操作定义数据集,获取动态属性的第一MDX操作字段的操作定义信息。
其中,在本实施例中,步骤S1055所述根据所述报表查询请求以及动态属性的第一MDX操作字段的操作定义信息,生成MDX语句的步骤,具体包括:
根据所述目标字段,确定MDX语句的查询字段;
根据动态属性的第一MDX操作字段的操作定义信息,确定MDX语句的查询定义信息。
其中,若是报表查询请求还解析得到查询限制信息,并且查询限制信息对于本次查询有效(即若干个星型数据模型中包含查询限制信息的度量字段),则还需要在MDX语句中增加相应的限定(SQL引擎生成SQL语句时也同理),具体的,根据查询限制信息确定MDX语句的查询限制条件(即where部分)。
其中,在本实施例中,步骤S1054所述根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成数据模型描述信息的步骤,包括:
步骤S501,根据各个所述星型数据模型的事实表和维度表,确定数据库表描述信息;
步骤S502,根据各个所述星型数据模型的度量字段,确定度量描述信息;
步骤S503,根据各个所述星型数据模型的维度字段,确定维度描述信息;
步骤S504,根据所述静态属性的第一MDX操作字段的操作定义信息,确定MDX操作字段描述信息;
步骤S505,根据所述数据库表描述信息、所述度量描述信息、所述维度描述信息以及所述MDX操作字段描述信息,生成数据模型描述信息。
本申请实施例中,MDX语句是基于用户查询的目标字段确定,所述若干个星型数据模型中的数据表以及基础字段也是基于用户查询的目标字段确定,根据所述若干个星型数据模型中记录的数据表以及基础字段生成所述数据模型描述信息,从而数据模型描述信息实际上描述了与MDX语句相关的信息,从而使得MDX引擎能够根据数据模型描述信息执行MDX语句,查询得到目标字段的查询结果。
其中,步骤S501所述根据各个所述星型数据模型的事实表和维度表,确定数据库表描述信息的步骤,包括:
根据任一所述星型数据模型中的事实表确定对应的第一查询数据表;
根据任一所述星型数据模型中不绑定查询限制参数的维度表确定对应的第二查询数据表;其中,所述查询限制参数用于限制用户的查询范围;
根据任一所述星型数据模型中绑定查询限制参数的维度表确定对应的第三查询数据表;其中,所述第三查询数据表根据所述绑定查询限制参数的维度表及其绑定的查询限制参数确定;
将任一所述星型数据模型对应的所述第一查询数据表与对应的各个所述第二查询数据表依次进行左连结,并与对应的各个所述第三查询数据表依次进行内连结,得到对应的第四查询数据表;
将各个星型数据模型对应的所述第四查询数据表进行合并连结,得到第五查询数据表;
根据所述第五查询数据表,确定数据库表描述信息。
其中,所述合并连结在本实施例中是采用union all(为SQL语句中的操作符)的连结方式。
需要说明的是,本实施例中若是仅存在一个星型数据模型,则不存在将各个星型数据模型对应的所述第四查询数据表进行合并连结得到第五查询数据表的步骤,而是直接根据第四查询数据表得到数据库表描述信息。
在一个实施例中,步骤S1054所述根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成数据模型描述信息的步骤,包括步骤:
步骤S10541,若判断出当前查询确定的所述若干个星型数据模型不存在对应缓存的星型数据模型,根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成当前查询的数据模型描述信息;
步骤S10542,若判断当前查询确定的所述若干个星型数据模型存在对应缓存的星型数据模型,判断所述缓存的数据模型描述信息中是否存在当前查询的静态属性的第一MDX操作字段;若判断出在所述缓存的数据模型描述信息中不存在当前查询的静态属性的第一MDX操作字段,根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成当前查询的数据模型描述信息;若判断出当前查询确定的所述若干个星型数据模型存在对应缓存的星型数据模型,且在所述缓存的数据模型描述信息中存在当前查询的静态属性的第一MDX操作字段,将所述缓存的数据模型描述信息作为当前查询的数据模型描述信息。
本实施例中,MDX引擎缓存历史查询时确定的星型数据模型的数据以及对应的数据模型描述信息,从而在处理新的查询请求时,若是判断当前查询所确定的若干个星型数据模型存在对应缓存的星型数据模型,并且当前查询的静态属性的第一MDX操作字段也在该缓存的数据模型描述信息中,则不必重新生成数据模型描述信息,而是直接采用缓存的数据模型描述信息作为当前查询的数据模型描述信息,从而可以加快查询效率。具体而言,本实施例中其实便是针对步骤S1022的查询情况,在用户选择进行快速查询时,其MDX操作字段便在步骤S1022中被记录为静态属性,在静态属性的情况下,便可能满足条件从而直接采用缓存的数据模型描述信息进行快速查询。
基于上述实施例的说明,在一个实施例中,若解析所述报表查询请求得到的目标字段仅包括静态属性的第一MDX操作字段,而不包括动态属性的第一MDX操作字段,则通过MDX引擎进行数据查询时,获取所述静态属性的第一MDX操作字段对应的操作定义信息;根据各个所述星型数据模型以及静态属性的第一MDX操作字段对应的操作定义信息,生成数据模型描述信息;以及直接根据所述报表查询请求(而不存在动态属性的第一MDX操作字段的操作定义信息),生成MDX语句;根据所述MDX语句以及所述数据模型描述信息,从预设的数据库中查询得到所述目标字段的查询结果。在这种情况下,MDX引擎在处理查询请求时,判断能否采用缓存的数据模型描述信息(记录了相同的星型数据模型的描述信息)时,参考前述实施例的说明。
基于上述实施例的说明,在一个实施例中,若解析所述报表查询请求得到的目标字段仅包括动态属性的第一MDX操作字段,而不包括静态属性的第一MDX操作字段,则通过MDX引擎进行数据查询时,获取所述动态属性的第一MDX操作字段对应的操作定义信息;直接根据各个所述星型数据模型(而不存在静态属性的第一MDX操作字段对应的操作定义信息),生成数据模型描述信息;根据所述报表查询请求以及所述动态属性的第一MDX操作字段的操作定义信息,生成MDX语句;根据所述MDX语句以及所述数据模型描述信息,从预设的数据库中查询得到所述目标字段的查询结果。在这种情况下,MDX引擎在处理查询请求时,若是判断当前查询所确定的若干个星型数据模型存在对应缓存的星型数据模型,则不必重新生成数据模型描述信息,而是直接采用缓存的数据模型描述信息作为当前查询的数据模型描述信息(显然,不必判断缓存的数据模型描述信息中是否包含静态属性的第一MDX操作字段的操作定义信息),从而可以加快查询效率。也就是说,在查询的目标字段不涉及静态属性的第一MDX操作字段时,最多仅需要在MDX语句对动态属性的第一MDX操作字段进行定义即可,而无需在数据模型描述信息中进行定义,因此可以直接采用相同的星型数据模型对应缓存的数据模型描述信息(记录了相同的星型数据模型的描述信息)在本次查询中进行使用,从而实现快速查询。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,则本申请也意图包含这些改动和变形。

Claims (11)

1.一种基于双查询引擎的数据查询方法,其特征在于,包括以下步骤:
获取用户的报表查询请求;
解析所述报表查询请求得到查询的目标字段;根据所述目标字段确定基础字段;其中,所述目标字段包括基础字段和/或第一MDX操作字段,所述MDX操作字段绑定至少一个基础字段;
确定包含所述基础字段的若干个星型数据模型;其中,每个所述星型数据模型分别记录事实表、维度表以及记录各个数据表分别包含的基础字段;
若所述目标字段不包括第一MDX操作字段,通过SQL引擎根据所述目标字段以及各个所述星型数据模型确定第一SQL语句;根据所述第一SQL语句从预设的数据库中查询得到所述目标字段的查询结果;其中,所述第一SQL语句的查询字段根据所述目标字段确定,所述第一SQL语句的查询数据源根据各个所述星型数据模型确定;
若所述目标字段包括第一MDX操作字段,通过MDX引擎根据所述第一MDX操作字段获取对应的操作定义信息;根据各个所述星型数据模型以及所述操作定义信息,生成数据模型描述信息;根据所述报表查询请求以及所述操作定义信息,生成MDX语句;根据所述MDX语句以及所述数据模型描述信息,从预设的数据库中查询得到所述目标字段的查询结果。
2.根据权利要求1所述的基于双查询引擎的数据查询方法,其特征在于,若解析所述报表查询请求还得到查询限制信息,所述查询限制信息包括度量字段以及与所述度量字段绑定的维度字段和/或第二MDX操作字段,所述确定包含所述基础字段的若干个星型数据模型的步骤之后,还包括步骤:
若所述目标字段包括第一MDX操作字段,确定通过MDX引擎进行数据查询;
若所述目标字段不包括第一MDX操作字段,但,所述若干个星型数据模型包括所述查询限制信息的度量字段,且所述查询限制信息包括第二MDX操作字段,确定通过MDX引擎进行数据查询;
若所述目标字段不包括第一MDX操作字段,但,所述若干个星型数据模型包括所述查询限制信息的度量字段,且所述查询限制信息不包括第二MDX操作字段,确定通过SQL引擎进行数据查询;
若所述目标字段不包括第一MDX操作字段,但,所述若干个星型数据模型不包括所述查询限制信息的度量字段,确定通过SQL引擎进行数据查询。
3.根据权利要求1或2所述的基于双查询引擎的数据查询方法,其特征在于,所述第一MDX操作字段包括静态属性的第一MDX操作字段和动态属性的第一MDX操作字段;
所述通过MDX引擎根据所述第一MDX操作字段获取对应的操作定义信息的步骤,包括:
根据所述第一MDX操作字段的预设的属性信息,确定所述第一MDX操作字段为静态属性的第一MDX操作字段或动态属性的第一MDX操作字段;
获取静态属性的第一MDX操作字段的操作定义信息;
获取动态属性的第一MDX操作字段的操作定义信息;
所述根据各个所述星型数据模型以及所述操作定义信息,生成数据模型描述信息的步骤,包括:
根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成数据模型描述信息;
所述根据所述报表查询请求以及所述操作定义信息,生成MDX语句的步骤,包括:
根据所述报表查询请求以及动态属性的第一MDX操作字段的操作定义信息,生成MDX语句。
4.根据权利要求3所述的基于双查询引擎的数据查询方法,其特征在于,所述根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成数据模型描述信息的步骤,包括步骤:
若判断出当前查询确定的所述若干个星型数据模型不存在对应缓存的星型数据模型,根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成当前查询的数据模型描述信息;
若判断当前查询确定的所述若干个星型数据模型存在对应缓存的星型数据模型,判断所述缓存的数据模型描述信息中是否存在当前查询的静态属性的第一MDX操作字段;若判断出在所述缓存的数据模型描述信息中不存在当前查询的静态属性的第一MDX操作字段,根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成当前查询的数据模型描述信息;若判断出当前查询确定的所述若干个星型数据模型存在对应缓存的星型数据模型,且在所述缓存的数据模型描述信息中存在当前查询的静态属性的第一MDX操作字段,将所述缓存的数据模型描述信息作为当前查询的数据模型描述信息。
5.根据权利要求3所述的基于双查询引擎的数据查询方法,其特征在于,所述第一MDX操作字段包括用户自定义操作字段和预定义操作字段;所述解析所述报表查询请求得到查询的目标字段的步骤之后,还包括:
若解析所述报表查询请求还得到用户自定义操作字段、与所述用户自定义操作字段绑定的基础字段以及MDX操作定义公式,根据所述用户自定义操作字段绑定的基础字段以及所述MDX操作定义公式,确定所述用户自定义操作字段对应的操作定义信息;在操作定义数据集中记录所述用户自定义操作字段、所述用户自定义操作字段对应的操作定义信息,以及记录所述用户自定义操作字段的属性信息为动态属性;
若解析所述报表查询请求还得到预定义操作字段、与所述预定义操作字段绑定的基础字段以及快速查询标识,则根据所述预定义操作字段,从预设的操作定义公式库中获取对应的第一操作定义公式,根据所述预定义操作字段绑定的基础字段以及所述第一操作定义公式,确定所述预定义操作字段对应的操作定义信息;在操作定义数据集中记录所述预定义操作字段、所述预定义操作字段对应的操作定义信息,以及记录所述预定义操作字段的属性信息为静态属性;其中,所述预设的操作定义公式库中存储若干预定义操作字段以及对应的操作定义公式;
若解析所述报表查询请求还得到预定义操作字段、与所述预定义操作字段绑定的基础字段,且未解析到快速查询标识与所述预定义操作字段绑定,则根据所述预定义操作字段,从所述操作定义公式库中获取对应的第二操作定义公式,根据所述预定义操作字段绑定的基础字段以及所述第二操作定义公式,确定所述预定义操作字段对应的操作定义信息;在操作定义数据集中记录所述预定义操作字段、所述预定义操作字段对应的操作定义信息,以及记录所述预定义操作字段的属性信息为动态属性。
6.根据权利要求5所述的基于双查询引擎的数据查询方法,其特征在于,所述根据所述第一MDX操作字段的预设的属性信息,确定所述第一MDX操作字段为静态属性的第一MDX操作字段或动态属性的第一MDX操作字段的步骤,包括:
根据所述操作定义数据集中记录的所述第一MDX操作字段的属性信息,确定所述第一MDX操作字段为静态属性的第一MDX操作字段或动态属性的第一MDX操作字段;
所述获取静态属性的第一MDX操作字段的操作定义信息的步骤,包括:
根据所述操作定义数据集,获取静态属性的第一MDX操作字段的操作定义信息;
所述获取动态属性的第一MDX操作字段的操作定义信息的步骤,包括:
根据所述操作定义数据集,获取动态属性的第一MDX操作字段的操作定义信息。
7.根据权利要求3所述的基于双查询引擎的数据查询方法,其特征在于,所述根据所述报表查询请求以及动态属性的第一MDX操作字段的操作定义信息,生成MDX语句的步骤,包括:
根据所述目标字段,确定MDX语句的查询字段;
根据动态属性的第一MDX操作字段的操作定义信息,确定MDX语句的查询定义信息。
8.根据权利要求3所述的基于双查询引擎的数据查询方法,其特征在于,任一所述星型数据模型的数据表不包含所述目标字段的基础字段之外的其他字段;
所述根据所述目标字段以及各个所述星型数据模型确定第一SQL语句的步骤,包括:
根据任一所述星型数据模型中的基础字段确定对应的第一查询字段;
根据任一所述星型数据模型中的事实表确定对应的第一查询数据表;
根据任一所述星型数据模型中不绑定查询限制参数的维度表确定对应的第二查询数据表;其中,所述查询限制参数用于限制用户的查询范围;
根据任一所述星型数据模型中绑定查询限制参数的维度表确定对应的第三查询数据表;其中,所述第三查询数据表根据所述绑定查询限制参数的维度表及其绑定的查询限制参数确定;
将任一所述目标星型数据模型对应的所述第一查询数据表与对应的各个所述第二查询数据表依次进行左连结,并与对应的各个所述第三查询数据表依次进行内连结,得到对应的第四查询数据表;
根据任一所述星型数据模型对应的所述第一查询字段以及所述第四查询数据表,生成对应的第二SQL语句;
将各个所述星型数据模型对应的第二SQL语句进行全连结或左连结,得到第三SQL语句;
根据所述目标字段确定所述第一SQL语句的查询字段;
根据所述第三SQL语句确定所述第一SQL语句的查询数据源。
9.根据权利要求3所述的基于双查询引擎的数据查询方法,其特征在于,任一所述星型数据模型的数据表不包含所述目标字段的基础字段之外的其他字段;
所述根据各个所述星型数据模型以及静态属性的第一MDX操作字段的操作定义信息,生成数据模型描述信息的步骤,包括:
根据各个所述星型数据模型的事实表和维度表,确定数据库表描述信息;
根据各个所述星型数据模型的度量字段,确定度量描述信息;
根据各个所述星型数据模型的维度字段,确定维度描述信息;
根据所述静态属性的第一MDX操作字段的操作定义信息,确定MDX操作字段描述信息;
根据所述数据库表描述信息、所述度量描述信息、所述维度描述信息以及所述MDX操作字段描述信息,生成数据模型描述信息。
10.根据权利要求9所述的基于双查询引擎的数据查询方法,其特征在于,所述根据各个所述星型数据模型的事实表和维度表,确定数据库表描述信息的步骤,包括:
根据任一所述星型数据模型中的事实表确定对应的第一查询数据表;
根据任一所述星型数据模型中不绑定查询限制参数的维度表确定对应的第二查询数据表;其中,所述查询限制参数用于限制用户的查询范围;
根据任一所述星型数据模型中绑定查询限制参数的维度表确定对应的第三查询数据表;其中,所述第三查询数据表根据所述绑定查询限制参数的维度表及其绑定的查询限制参数确定;
将任一所述星型数据模型对应的所述第一查询数据表与对应的各个所述第二查询数据表依次进行左连结,并与对应的各个所述第三查询数据表依次进行内连结,得到对应的第四查询数据表;
将各个星型数据模型对应的所述第四查询数据表进行合并连结,得到第五查询数据表;
根据所述第五查询数据表,确定数据库表描述信息。
11.根据权利要求1所述的基于双查询引擎的数据查询方法,其特征在于,所述获取用户的报表查询请求的步骤,包括:
获取用户的查询请求,若所述用户的查询请求包括预设的明细查询标识,确定所述用户的查询请求为明细查询请求,否则确定为报表查询请求;
所述方法还包括步骤:
若所述用户的查询请求为明细查询请求,确定通过SQL引擎进行数据查询;
解析所述明细查询请求得到查询的基础字段;
确定包含所述基础字段的若干个第二星型数据模型;
通过SQL引擎根据查询的基础字段以及各个所述第二星型数据模型生成第三SQL语句;根据所述第三SQL语句从所述预设的数据库中查询得到所述基础字段的查询结果;其中,所述第三SQL语句的查询字段根据所述查询的基础字段确定,所述第三SQL语句的查询数据源根据各个所述第二星型数据模型确定。
CN202410217260.8A 2024-02-28 2024-02-28 基于双查询引擎的数据查询方法 Pending CN117807108A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202410217260.8A CN117807108A (zh) 2024-02-28 2024-02-28 基于双查询引擎的数据查询方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202410217260.8A CN117807108A (zh) 2024-02-28 2024-02-28 基于双查询引擎的数据查询方法

Publications (1)

Publication Number Publication Date
CN117807108A true CN117807108A (zh) 2024-04-02

Family

ID=90425822

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202410217260.8A Pending CN117807108A (zh) 2024-02-28 2024-02-28 基于双查询引擎的数据查询方法

Country Status (1)

Country Link
CN (1) CN117807108A (zh)

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102682118A (zh) * 2012-05-15 2012-09-19 北京久其软件股份有限公司 一种多维数据模型访问方法及装置
CN107704608A (zh) * 2017-10-17 2018-02-16 北京览群智数据科技有限责任公司 一种olap多维分析和数据挖掘系统
CN110222124A (zh) * 2019-05-08 2019-09-10 跬云(上海)信息科技有限公司 基于olap的多维数据处理方法及系统
CN113342843A (zh) * 2021-07-06 2021-09-03 多点生活(成都)科技有限公司 大数据在线分析方法和系统
CN115168398A (zh) * 2022-08-09 2022-10-11 北京京东振世信息技术有限公司 数据查询方法、装置、电子设备及存储介质
US20230017300A1 (en) * 2020-12-10 2023-01-19 Kuyun (Shanghai) Information Technology Co., Ltd. Query method and device suitable for olap query engine
US20230153298A1 (en) * 2021-05-24 2023-05-18 Kuyun (Shanghai) Information Technology Co., Ltd. Data query method, device and equipment and a storage medium
CN117131055A (zh) * 2023-09-01 2023-11-28 中国邮政储蓄银行股份有限公司 多维数据的数据分析方法、数据分析装置和数据分析系统
CN117573698A (zh) * 2024-01-15 2024-02-20 广州思迈特软件有限公司 数据查询方法及存储介质

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102682118A (zh) * 2012-05-15 2012-09-19 北京久其软件股份有限公司 一种多维数据模型访问方法及装置
CN107704608A (zh) * 2017-10-17 2018-02-16 北京览群智数据科技有限责任公司 一种olap多维分析和数据挖掘系统
CN110222124A (zh) * 2019-05-08 2019-09-10 跬云(上海)信息科技有限公司 基于olap的多维数据处理方法及系统
US20230017300A1 (en) * 2020-12-10 2023-01-19 Kuyun (Shanghai) Information Technology Co., Ltd. Query method and device suitable for olap query engine
US20230153298A1 (en) * 2021-05-24 2023-05-18 Kuyun (Shanghai) Information Technology Co., Ltd. Data query method, device and equipment and a storage medium
CN113342843A (zh) * 2021-07-06 2021-09-03 多点生活(成都)科技有限公司 大数据在线分析方法和系统
CN115168398A (zh) * 2022-08-09 2022-10-11 北京京东振世信息技术有限公司 数据查询方法、装置、电子设备及存储介质
CN117131055A (zh) * 2023-09-01 2023-11-28 中国邮政储蓄银行股份有限公司 多维数据的数据分析方法、数据分析装置和数据分析系统
CN117573698A (zh) * 2024-01-15 2024-02-20 广州思迈特软件有限公司 数据查询方法及存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
张悦;赵永翼;刘D;: "基于MDX及MOLAP实现多维数据分析", 沈阳航空工业学院学报, no. 01, 15 February 2008 (2008-02-15) *

Similar Documents

Publication Publication Date Title
US10740396B2 (en) Representing enterprise data in a knowledge graph
US20210049163A1 (en) Data preparation context navigation
US9165049B2 (en) Translating business scenario definitions into corresponding database artifacts
US7668860B2 (en) Apparatus and method for constructing and using a semantic abstraction for querying hierarchical data
CN107704608A (zh) 一种olap多维分析和数据挖掘系统
US20070061318A1 (en) System and method of data source agnostic querying
US20140351241A1 (en) Identifying and invoking applications based on data in a knowledge graph
US9037525B2 (en) Correlating data from multiple business processes to a business process scenario
US20120166620A1 (en) System and method for integrated real time reporting and analytics across networked applications
EP2657860A1 (en) Data flow graph optimization using rules
US10565201B2 (en) Query processing management in a database management system
US9753960B1 (en) System, method, and computer program for dynamically generating a visual representation of a subset of a graph for display, based on search criteria
JP5922805B2 (ja) 進化的な分析のためのシステム
US10241961B2 (en) Augmented query optimization by data flow graph model optimizer
CN111488406B (zh) 一种图数据库管理方法
Holland et al. PASSing the provenance challenge
US10901811B2 (en) Creating alerts associated with a data storage system based on natural language requests
CN114265945A (zh) 血缘关系提取方法、装置及电子设备
US20190034500A1 (en) Creating dashboards for viewing data in a data storage system based on natural language requests
CN117573698B (zh) 数据查询方法及存储介质
CN117807108A (zh) 基于双查询引擎的数据查询方法
US11455308B2 (en) Partition aware partial query processing
US10331715B2 (en) Metadata enrichment with a keyword definition editor
US20140136274A1 (en) Providing multiple level process intelligence and the ability to transition between levels
CN115292285A (zh) 一种基于分布式架构的数据专题管理方法及系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination