CN110019296B - 数据库查询脚本的生成方法、装置、存储介质及处理器 - Google Patents
数据库查询脚本的生成方法、装置、存储介质及处理器 Download PDFInfo
- Publication number
- CN110019296B CN110019296B CN201710905876.4A CN201710905876A CN110019296B CN 110019296 B CN110019296 B CN 110019296B CN 201710905876 A CN201710905876 A CN 201710905876A CN 110019296 B CN110019296 B CN 110019296B
- Authority
- CN
- China
- Prior art keywords
- query
- treebuilder
- script
- generating
- analysis tree
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据库查询脚本的生成方法、装置、存储介质及处理器,所述方法包括:获得查询请求,所述查询请求中至少包括查询参数;根据所述查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder;其中,所述第一TreeBuilder集合包括至少两个TreeBuilder,所述第一TreeBuilder集合中的每个TreeBuilder的构造逻辑不同;基于所述目标TreeBuilder,生成分析树;基于所述分析树,生成查询脚本,所述查询脚本用于根据所述查询参数在数据库中进行数据查询。
Description
技术领域
本发明涉及数据处理技术领域,特别涉及一种数据库查询脚本的生成方法、装置、存储介质及处理器。
背景技术
在数据库中进行数据查询时,需要构造数据库查询脚本,即SQLScript。根据输入的业务查询参数(即,CommonQuery)构造SQLScript。
而通用的查询脚本生成方案无论是哪种查询场景都使用同一套TreeBuilder(构造树逻辑),从而生成的查询脚本在针对某一个查询场景时查询性能较差。
发明内容
鉴于上述问题,提出了本发明以便提供一种数据库查询脚本的生成方法、装置、存储介质及处理器,用以解决现有技术中通用的查询脚本生成方案存在查询性能较差的技术问题。
本申请提供了一种数据库查询脚本的生成方法,包括:
获得查询请求,所述查询请求中至少包括查询参数;
根据所述查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder;其中,所述第一TreeBuilder集合包括至少两个TreeBuilder,所述第一TreeBuilder集合中的每个TreeBuilder的构造逻辑不同;
基于所述目标TreeBuilder,生成分析树;
基于所述分析树,生成查询脚本,所述查询脚本用于根据所述查询参数在数据库中进行数据查询。
上述方法,优选地,在基于所述分析树,生成查询脚本之前,所述方法还包括:
在第二TreeBuilder集合中确定目标OptimizeTreeBuilder;其中,所述第二TreeBuilder集合中包括至少一个OptimizeTreeBuilder,所述第二TreeBuilder集合中的每个OptimizeTreeBuilder的构造逻辑不同;
基于所述目标OptimizeTreeBuilder,对所述分析树进行优化操作。
上述方法,优选地,还包括:
执行所述查询脚本,以得到查询结果。
上述方法,优选地,基于所述分析树,生成查询脚本,包括:
基于所述分析树中的构造逻辑,获取当前查询所涉及的维度表和至少两个事实表;
将所述至少两个事实表依次关联到所述维度表上,得到所述维度表与全部所述事实表进行关联的关联结果;
利用所述关联结果构造数据库的查询脚本。
上述方法,优选地,查询参数至少包括过滤条件,则基于分析树,生成查询脚本,包括:
找出分析树的所有叶子节点,其中,每个叶子节点对应一个表;
提取查询参数中的过滤条件,从查询参数的过滤条件中筛选出与叶子节点对应的各个表中的分区键字段一致的分区键字段过滤条件;
依据预设的表和分区键字段的对应关系,将筛选出的分区键字段过滤条件添加到包含分区键字段的叶子节点中;
基于调整后的分析树,生成查询脚本。
本申请还提供了一种数据库查询脚本的生成装置,包括:
请求获得单元,用于获得查询请求,所述查询请求中至少包括查询参数;
目标确定单元,用于根据所述查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder;其中,所述第一TreeBuilder集合包括至少两个TreeBuilder,所述第一TreeBuilder集合中的每个TreeBuilder的构造逻辑不同;
分析树生成单元,用于基于所述目标TreeBuilder,生成分析树;
脚本生成单元,用于基于所述分析树,生成查询脚本,所述查询脚本用于根据所述查询参数在数据库中进行数据查询。
上述装置,优选地,还包括:
扩展处理单元,用于在所述脚本生成单元生成查询脚本之前,在第二TreeBuilder集合中确定目标OptimizeTreeBuilder;其中,所述第二TreeBuilder集合中包括至少一个OptimizeTreeBuilder,所述第二TreeBuilder集合中的每个OptimizeTreeBuilder的构造逻辑不同;再基于所述目标OptimizeTreeBuilder,对所述分析树进行优化操作。
上述装置,优选地,还包括:
脚本执行单元,用于执行所述查询脚本,以得到查询结果。
上述装置,优选地,所述脚本生成单元包括:
表获取模块,用于基于所述分析树中的构造逻辑,获取当前查询所涉及的维度表和至少两个事实表;
关联处理模块,用于将所述至少两个事实表依次关联到所述维度表上,得到所述维度表与全部所述事实表进行关联的关联结果;
脚本构造模块,用于利用所述关联结果构造数据库的查询脚本。
本申请还提供了一种存储介质,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行上述任意一项所述的数据库查询脚本的生成方法。
本申请还提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行上述任意一项所述的数据库查询脚本的生成方法。
借由上述技术方案,本发明提供的一种数据库查询脚本的生成方法及装置通过提供多个不同构造逻辑的TreeBuilder以供选择,从而在生成查询脚本过程中,可以根据实际的查询参数来确定构造逻辑适合相应查询场景的TreeBuilder来生成查询脚本,使得生成的查询脚本能够更加符合当前的查询需求,由此通过本发明所生成的查询脚本能够适用于多种查询场景,提高查询性能,为用户提供多元化及智能化的查询服务。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本申请实施例一提供的一种数据库查询脚本的生成方法的流程图;
图2为本申请实施例一提供的一种数据库查询脚本的生成方法的另一流程图;
图3a及图3b分别为本申请实施例的应用示例图;
图4为本申请实施例一提供的一种数据库查询脚本的生成方法中相应步骤的流程图;
图5为本申请实施例二提供的一种数据库查询脚本的生成方法的流程图;
图6为本申请实施例三提供的一种数据库查询脚本的生成装置的结构示意图;
图7a及图7b分别为本申请实施例三提供的一种数据库查询脚本的生成装置的另一结构示意图;
图8为本申请实施例三提供的一种数据库查询脚本的生成装置相应组件的结构示意图;
图9为本申请实施例四提供的一种数据库查询脚本的生成装置的结构示意图;
图10为本申请实施例提供的一种存储介质的结构示意图;
图11示出了本申请实施例提供的一种处理器的结构示意图;
图12示出了本申请实施例提供的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
参考图1,为本申请实施例一提供的一种数据库查询脚本的生成方法的实现流程图,适用于查询服务器中,在本实施例中,该方法可以包括以下步骤:
步骤101:获得查询请求。
其中,查询请求中至少包括查询参数,该查询参数就是用户所需要查询的数据的标识类信息,例如,用户需要查询姓王的学生信息,则查询参数包括:姓氏王和学生两个参数。
步骤102:根据查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder。
其中,所述第一TreeBuilder集合包括至少两个TreeBuilder,所述第一TreeBuilder集合中的每个TreeBuilder的构造逻辑不同,不同构造逻辑的TreeBuilder能够构造出不同的组件或脚本,以提供不同的查询服务。
步骤103:基于所述目标TreeBuilder,生成分析树。
其中,TreeBuilder为组件或脚本构造分析树的实现程序,本实施例中基于目标TreeBuilder所生成的分析树为构造脚本如SQL过程中的一种数据结构,该数据结构与用户的查询需求相对应。
步骤104:基于所述分析树,生成查询脚本。
其中,所述查询脚本用于根据所述查询参数在数据库中进行数据查询。也就是说,基于目标TreeBuilder所生成的分析树生成的查询脚本能够满足用户当前的查询需求,符合当前的查询场景。
本发明实施例中的第一TreeBuilder集合包括的至少两个treebuilder,可以包括通用TreeBuilder、第一TreeBuilder、第二TreeBuilder。其中,通用TreeBuilder就是现有技术通用的TreeBuilder,对于第一TreeBuilder和第二TreeBuilder下面分别介绍。
第一TreeBuilder的执行逻辑如下:
对于一次查询涉及的至少一个维度表和至少两个事实表,先对所有维度表进行关联,得到关联后的维度表;再将所有事实表逐个关联到该关联后的维度表上,得到经第一TreeBuilder调整后的分析树。之后,再基于调整后的分析树生成查询脚本。其中,具体生成查询脚本的实现方案可以参考下文中图4所描述的示例。
例如,本次查询涉及第一维度表D1、第二维度表D2和第三维度表D3,则先将这三个维度表依次进行关联;首先,将D1与D2进行Join,得到D1_D2;然后,再将D3与D1_D2进行Join,得到D1_D2_D3,并记为D123,该D123即所述关联后的维度表。
D123的数据量级最大不超过D1、D2、D3三者中的最大数据量级,例如,D1的数据量级是10万、D2的数据量级是100万,而D3是1万,则关联后的D123的数据量级最大不会超过100万。
若本次查询涉及的事实表包括第一事实表M1、第二事实表M2和第三事实表M3。那么首先,可以将M1与D123进行Join,得到D123_M1;然后,将M2与D123_M1进行Join,得到D123_M1_M2;最后,将M3与D123_M1_M2进行Join,得到D123_M1_M2_M3。关联得到的D123_M1_M2_M3的数据量级取决于D123的数据量级。
第二TreeBuilder的执行逻辑如下:
找出所述分析树的所有叶子节点(每个叶子节点对应一个表);提取查询参数中的过滤条件,从查询参数的过滤条件中筛选出与叶子节点对应的各个表中的分区键字段一致的分区键字段过滤条件;依据预设的表和分区键字段的对应关系,将筛选出的分区键字段过滤条件添加到包含分区键字段的叶子节点中。之后,再基于叶子节点中添加分区键字段过来条件的分析树,来生成查询脚本。其中,查询参数至少包括过滤条件。
其中表和分区键字段的对应关系,可以通过预先配置表和分区键的对应关系获得,也可以通过动态解析数据库中表的分区键字段来获得表和分区键的对应关系。
分布式数据库在存储数据时可以按照特定的分区键字段对数据表进行分区,在进行数据查询时可以通过分区键字段对数据进行分区裁剪,以降低查询数据量,提高查询性能。分区裁剪可以理解为仅取出数据表中的某部分数据进行查询,分区裁剪在查询脚本中的表现是对分区键字段进行过滤。
但是,现有技术中当查询涉及多个表,且多个表存在相同的分区键字段时,所生成的数据查询脚本只能对其中一个表的分区键字段进行过滤,导致大幅降低了其他表的查询速度,影响查询性能。例如,某次查询涉及到A表、B表,且A表、B表中都存在id1分区键字段,传统的根据通用TreeBuilder生成的数据查询脚本只会对A表进行id1字段的过滤,或者只对B表进行id1字段的过滤。当只对A表进行id1字段的过滤时,由于并未对B表进行id1字段的过滤,可以理解B表的查询范围并没有缩小,B表的查询数据量相对较大,导致B表的查询速度相对较慢,最终会影响整个查询的性能。在上述例子中,只涉及2个表的查询,如果一次查询涉及到许多表,那么对查询数据的效率影响会更大。
而第二TreeBuilder通过将属于分区键字段的过滤条件,添加到每一个包括该分区键字段的表对应的查询脚本中,使得在查询数据时,该查询脚本可以对所查询的表中每一个包括该分区键字段的表按照对应的过滤条件进行过滤,而不是只对其中的一个表进行过滤,大幅度缩小了查询的范围,减小了查询数据量,提高了查询效率。
一个叶子节点对应的表中的分区键字段与查询参数中的过滤条件一致的分区键字段可能是一个、多个或没有。对于有一个一致的分区键字段的叶子节点,将对应一致的分区键字段的分区键字段过滤条件加到该叶子节点;对于有多个一致的分区键字段的叶子节点,则将对应一致的多个分区键字段的分区键字段过滤条件加到该叶子节点;对于没有一致的分区键字段的叶子节点则不做处理。
由上述技术方案,本发明实施例一提供的一种数据库查询脚本的生成方法通过提供多个不同构造逻辑的TreeBuilder以供选择,从而在生成查询脚本过程中,可以根据实际的查询参数来确定构造逻辑适合相应查询场景的TreeBuilder来生成查询脚本,使得生成的查询脚本能够更加符合当前的查询需求,由此通过本实施例所生成的查询脚本能够适用于多种查询场景,提高查询性能,为用户提供多元化及智能化的查询服务。
基于图1所示的实现方案,为了能够进一步贴近用户的查询需求,多样化所生成的查询脚本的查询功能,如图2所示,在步骤103之后,在步骤104之前,该方法还可以包括以下步骤:
步骤105:在第二TreeBuilder集合中确定目标OptimizeTreeBuilder。
其中,所述第二TreeBuilder集合中包括至少一个OptimizeTreeBuilder,所述第二TreeBuilder集合中的每个OptimizeTreeBuilder的构造逻辑不同,不同构造逻辑的OptimizeTreeBuilder能够对组件或脚本提供进一步的不同的优化功能,以提供不同的查询服务。
第二TreeBuilder集合中的至少一个OptimizeTreeBuilder可以是上述第一TreeBuilder和第二TreeBuilder等。如果在第一TreeBuilder集合中选择了使用第一TreeBuilder优化,则第二TreeBuilder集合就选择第一TreeBuilder以外的其他OptimizeTreeBuilder(如第二TreeBuilder)优化,效果会更好。
步骤106:基于所述目标OptimizeTreeBuilder,对所述分析树进行优化操作。
其中,本实施例中是在根据用户当前的查询参数来生成能够适用于当前查询场景的分析树之后,在生成查询脚本之前,利用OptimizeTreeBuilder对分析树进行优化操作,为用户提供更加丰富的查询服务。
需要说明的是,本实施例中对分析树的优化操作可以包括一次或多次,也就是说,本实施例中利用OptimizeTreeBuilder对分析树进行一次优化之后,仍然可以根据需求再次利用不同或者相同的TreeBuilder对分析树进行再次优化,优化次数可以根据需求动态添加,以满足用户的各种查询需求。
如图3a中所示,用户不同的查询需求对应相应不同的查询参数,而本实施例基于不同的查询参数能够确定符合相应查询场景的TreeBuilder,从而生成能够满足不同的查询需求的分析树,而进一步的,如图3b中所示,在生成查询脚本之前,通过对分析树进行一次或多次优化,从而使得基于优化后的分析树所生成的查询脚本能够为用户提供更加丰富的查询功能,如提高查询性能、高查询准确率或者查询可靠性等,从而提供多元化的查询服务。
例如,本实施例的应用场景是一次查询涉及多个事实表,而维度表可以是多个或者一个,为了减少维度表单独与事实表之间的分别关联生成查询脚本后所造成查询的I/O资源和内存资源的开销,本实施例中通过找到能够满足这一查询需求的目标TreeBuilder来生成分析树,相应的,在后续生成查询脚本时基于该分析数据的特定的构造逻辑来实现。在一种具体的实现方式中,图1中步骤104在生成查询脚本时具体可以通过以下步骤实现,如图4中所示:
步骤401:基于所述分析树中的构造逻辑,获取当前查询所涉及的维度表和至少两个事实表。
其中,分析树的构造逻辑与用户当前查询的查询参数相对应,因此,本实施例中基于该构造逻辑,能够获得当前查询所涉及的维度表和至少两个事实表。
步骤402:将所述至少两个事实表依次关联到所述维度表上,得到所述维度表与全部所述事实表进行关联的关联结果。
本实施例中,将各个事实表依次关联到维度表上,此处的依次关联是指本次需要关联的事实表与上一次的关联结果进行关联,直到所有的事实表都关联到维度表上,并非各个事实表依次单独与维度表关联。
例如,首先将多个事实表中的任意一个事实表与维度表进行关联,得到关联结果,再检测出未关联的事实表,将检测出的下一个未关联的事实表与维度表对应的上一次关联的关联结果进行关联,直到当前查询所涉及的事实表全部关联完。
以当前查询所涉及的事实表包括三个事实表,维度表包括一个维度表为例:事实表包括第一事实表、第二事实表和第三事实表,所述维度表包括第一维度表,此时将事实表依次关联到所述维度表上,得到关联结果,具体包括:
将所述第一事实表与所述第一维度表进行关联,得到第一关联结果;
将所述第二事实表与所述第一关联结果进行关联,得到第二关联结果;
将所述第三事实表与所述第二关联结果进行关联,得到第三关联结果,该第三关联结果即为所需要的关联结果。
例如,确定出当前查询涉及维度表D1、第一事实表M1、第二事实表M2和第三事实表M3;从M1~M3中任选一个事实表(例如,选M1)与D1进行关联,得到第一关联结果D1_M1;
然后,选取下一个未关联的事实表(例如,选M2)与D1_M1进行关联,得到第二关联结果D1_M1_M2;
然后,选取下一个未关联的事实表M3与第二关联结果D1_M1_M2进行关联,得到第三关联结果D1_M1_M2_M3。
该第三关联结果D1_M1_M2_M3就是本次查询的查询脚本构造过程中所需的分析树,需要说明的是,D1_M1_M2_M3只是分析树的抽象表达方式,并不是真正的分析树数据结构。
其中,D1_M1、D1_M1_M2和D1_M1_M2_M3的数据量级都是维度表D1的数据量级,可见,本申请的整个关联过程中的数据量级都是维度表D1的数据量级。
若本次查询涉及多个维度表,则先将维度表关联成一个维度表。以当前查询所涉及的维度表包括第一维度表和第二维度表,至少两个事实表包括第一事实表、第二事实表和第三事实表为例,此时将事实表依次关联到所述维度表上,得到所述维度表与全部所述事实表进行关联的关联结果,具体包括:
将所述第一维度表和所述第二维度表进行关联,得到第三维度表;
将所述第一事实表与所述第三维度表进行关联,得到第一关联结果;
将所述第二事实表与所述第一关联结果进行关联,得到第二关联结果;
将所述第三事实表与所述第二关联结果进行关联,得到第三关联结果,该第三关联结果即为所需要的关联结果。
例如,本次查询涉及第一维度表D1、第二维度表D2和第三维度表D3,涉及的事实表包括第一事实表M1、第二事实表M2和第三事实表M3,则先将这三个维度表依次进行关联,具体如下;
首先,将D1与D2进行Join,得到D1_D2;然后,再将D3与D1_D2进行Join,得到D1_D2_D3,并记为D123,该D123即所述新的维度表;
之后,可以将M1与D123进行Join,得到D123_M1;然后,可以将M2与D123_M1进行Join,得到D123_M1_M2;最后,将M3与D123_M1_M2进行Join,得到D123_M1_M2_M3。
其中,D123的数据量级最大不超过D1、D2、D3三者中的最大数据量级,例如,D1的数据量级是10万、D2的数据量级是100万,而D3是1万,则关联后的D123的数据量级最大不会超过100万。而关联得到的D123_M1_M2_M3的数据量级取决于D123的数据量级。
步骤403:利用所述关联结果构造数据库的查询脚本。
本实施例提供的数据库查询脚本生成方法,在获得本次查询所涉及的多个维度表和多个事实表后,先将多个维度表进行关联得到一个新的维度表,然后,再将多个事实表依次关联到新的维度表上,新的维度表的数据量级取决于所述多个维度表中的最大数据量级。因此,整个关联过程中,中间数据的数据量级始终是新的维度表的数据量级,远远小于现有的关联方式产生的中间数据量级。因此,大大减少了对I/O资源和内存资源的开销,从而提高了数据库查询性能。
参考图5,为本申请实施例二提供的一种数据库查询脚本的生成方法的实现流程图,在步骤104之后,该方法还可以包括以下步骤:
步骤107:执行查询脚本,以得到查询结果。
其中,本实施例中,在生成与用户当前的查询参数相对应的查询脚本之后,执行该查询脚本,使得该查询脚本在数据库中查询数据表,最终得到符合用户当前查询需求的查询结果。
参考图6,为本申请实施例三提供的一种数据库查询脚本的生成装置的结构示意图,该装置可以应用在查询服务器中,该装置可以包括以下结构:
请求获得单元601,用于获得查询请求。
其中,查询请求中至少包括查询参数,该查询参数就是用户所需要查询的数据的标识类信息,例如,用户需要查询姓王的学生信息,则查询参数包括:姓氏王和学生两个参数。
目标确定单元602,用于根据所述查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder。
其中,所述第一TreeBuilder集合包括至少两个TreeBuilder,所述第一TreeBuilder集合中的每个TreeBuilder的构造逻辑不同,不同构造逻辑的TreeBuilder能够构造出不同的组件或脚本,以提供不同的查询服务。
分析树生成单元603,用于基于所述目标TreeBuilder,生成分析树。
其中,TreeBuilder为组件或脚本构造分析树的实现程序,本实施例中基于目标TreeBuilder所生成的分析树为构造脚本如SQL过程中的一种数据结构,该数据结构与用户的查询需求相对应。
脚本生成单元604,用于基于所述分析树,生成查询脚本。
其中,所述查询脚本用于根据所述查询参数在数据库中进行数据查询。也就是说,基于目标TreeBuilder所生成的分析树生成的查询脚本能够满足用户当前的查询需求,符合当前的查询场景。
由上述技术方案,本发明实施例三提供的一种数据库查询脚本的生成装置通过提供多个不同构造逻辑的TreeBuilder以供选择,从而在生成查询脚本过程中,可以根据实际的查询参数来确定构造逻辑适合相应查询场景的TreeBuilder来生成查询脚本,使得生成的查询脚本能够更加符合当前的查询需求,由此通过本实施例所生成的查询脚本能够适用于多种查询场景,提高查询性能,为用户提供多元化及智能化的查询服务。
为了能够进一步贴近用户的查询需求,多样化所生成的查询脚本的查询功能,如图7a所示,该装置还可以包括以下结构:
扩展处理单元605,用于在所述脚本生成单元生成查询脚本之前,在第二TreeBuilder集合中确定目标OptimizeTreeBuilder;再基于所述目标OptimizeTreeBuilder,对所述分析树进行优化操作。
其中,所述第二TreeBuilder集合中包括至少一个OptimizeTreeBuilder,所述第二TreeBuilder集合中的每个OptimizeTreeBuilder的构造逻辑不同,不同构造逻辑的OptimizeTreeBuilder能够对组件或脚本提供进一步的不同的优化功能,以提供不同的查询服务。
其中,本实施例中是在根据用户当前的查询参数来生成能够适用于当前查询场景的分析树之后,在生成查询脚本之前,利用OptimizeTreeBuilder对分析树进行优化操作,为用户提供更加丰富的查询服务。
需要说明的是,本实施例中对分析树的优化操作可以包括一次或多次,也就是说,本实施例中可以包括多个扩展处理单元605,如图7b中所示,通过第一个扩展处理单元605利用OptimizeTreeBuilder对分析树进行一次优化之后,仍然可以根据需求再次通过其他扩展处理单元605利用不同或者相同的TreeBuilder对分析树进行再次优化,优化次数可以根据需求动态添加,以满足用户的各种查询需求。
如图3a中所示,用户不同的查询需求对应相应不同的查询参数,而本实施例基于不同的查询参数能够确定符合相应查询场景的TreeBuilder,从而生成能够满足不同的查询需求的分析树,而进一步的,如图3b中所示,在生成查询脚本之前,通过对分析树进行一次或多次优化,从而使得基于优化后的分析树所生成的查询脚本能够为用户提供更加丰富的查询功能,如提高查询性能、高查询准确率或者查询可靠性等,从而提供多元化的查询服务。
例如,本实施例的应用场景是一次查询涉及多个事实表,而维度表可以是多个或者一个,为了减少维度表单独与事实表之间的分别关联生成查询脚本后所造成查询的I/O资源和内存资源的开销,本实施例中通过找到能够满足这一查询需求的目标TreeBuilder来生成分析树,相应的,在后续生成查询脚本时基于该分析数据的特定的构造逻辑来实现。在一种具体的实现方式中,图6中的所述脚本生成单元604可以包括以下结构,如图8中所示:
表获取模块801,用于基于所述分析树中的构造逻辑,获取当前查询所涉及的维度表和至少两个事实表。
其中,分析树的构造逻辑与用户当前查询的查询参数相对应,因此,本实施例中基于该构造逻辑,能够获得当前查询所涉及的维度表和至少两个事实表。
关联处理模块802,用于将所述至少两个事实表依次关联到所述维度表上,得到所述维度表与全部所述事实表进行关联的关联结果。
本实施例中,将各个事实表依次关联到维度表上,此处的依次关联是指本次需要关联的事实表与上一次的关联结果进行关联,直到所有的事实表都关联到维度表上,并非各个事实表依次单独与维度表关联。
例如,首先将多个事实表中的任意一个事实表与维度表进行关联,得到关联结果,再检测出未关联的事实表,将检测出的下一个未关联的事实表与维度表对应的上一次关联的关联结果进行关联,直到当前查询所涉及的事实表全部关联完。
以当前查询所涉及的事实表包括三个事实表,维度表包括一个维度表为例:事实表包括第一事实表、第二事实表和第三事实表,所述维度表包括第一维度表,此时将事实表依次关联到所述维度表上,得到关联结果,具体包括:
将所述第一事实表与所述第一维度表进行关联,得到第一关联结果;
将所述第二事实表与所述第一关联结果进行关联,得到第二关联结果;
将所述第三事实表与所述第二关联结果进行关联,得到第三关联结果,该第三关联结果即为所需要的关联结果。
若本次查询涉及多个维度表,则先将维度表关联成一个维度表。以当前查询所涉及的维度表包括第一维度表和第二维度表,至少两个事实表包括第一事实表、第二事实表和第三事实表为例,此时将事实表依次关联到所述维度表上,得到所述维度表与全部所述事实表进行关联的关联结果,具体包括:
将所述第一维度表和所述第二维度表进行关联,得到第三维度表;
将所述第一事实表与所述第三维度表进行关联,得到第一关联结果;
将所述第二事实表与所述第一关联结果进行关联,得到第二关联结果;
将所述第三事实表与所述第二关联结果进行关联,得到第三关联结果,该第三关联结果即为所需要的关联结果。
脚本构造模块803,用于利用所述关联结果构造数据库的查询脚本。
本实施例提供的数据库查询脚本生成方法,在获得本次查询所涉及的多个维度表和多个事实表后,先将多个维度表进行关联得到一个新的维度表,然后,再将多个事实表依次关联到新的维度表上,新的维度表的数据量级取决于所述多个维度表中的最大数据量级。因此,整个关联过程中,中间数据的数据量级始终是新的维度表的数据量级,远远小于现有的关联方式产生的中间数据量级。因此,大大减少了对I/O资源和内存资源的开销,从而提高了数据库查询性能。
参考图9,为本申请实施例四提供的一种数据库查询脚本的生成装置的结构示意图,该装置还可以包括以下结构:
脚本执行单元606,用于执行所述查询脚本,以得到查询结果。
其中,本实施例中,在生成与用户当前的查询参数相对应的查询脚本之后,执行该查询脚本,使得该查询脚本在数据库中查询数据表,最终得到符合用户当前查询需求的查询结果。
在上述各装置实施例中,该装置可以包括有处理器及存储器,处理器及存储器为服务器等承载以上本实施例的设备上的元器件,上述的请求获得单元601、目标确定单元602、分析树生成单元603、脚本生成单元604、扩展处理单元605及脚本执行单元606等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
例如,上述各个程序单元以安装包或处理类的形式存储在存储器中,同时存储器中还存储有预先设置的配置文件,处理器通过调用安装包处理类,来执行以上各个程序单元,实现相应的功能。
具体的,处理器中包含内核,由内核去存储器中调取相应的程序单元,内核可以设置一个或多个,通过调整内核参数来获得查询请求,根据查询请求中的查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder,再基于所述目标TreeBuilder,生成分析树,并基于所述分析树,生成查询脚本。
其中,存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本发明实施例提供了一种存储介质,如图10中所示,该存储介质处于电子设备上,而该存储介质上存储有程序,该程序运行时控制该存储介质所在的设备执行图1~图5中所描述或展示的数据库查询脚本的生成方法。
本发明实施例提供了一种处理器,如图11中所示,该处理器用于运行程序,该程序可以为图10所示的存储介质中存储的程序,由此,处理器通过运行程序执行图1至图5中所描述或展示的数据库查询脚本的生成方法。
本发明实施例提供了一种电子设备,如图12中电子设备的结构示意图所示,该电子设备中可以包括处理器1201、存储器1202及存储在存储器上并可在处理器上运行的应用程序,处理器1201执行应用程序时实现以下步骤:获得查询请求,根据查询请求中的查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder,再基于所述目标TreeBuilder,生成分析树,并基于所述分析树,生成查询脚本。
其中,本文中的电子设备可以是服务器、PC、PAD、手机等。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:获得查询请求,根据查询请求中的查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder,再基于所述目标TreeBuilder,生成分析树,并基于所述分析树,生成查询脚本。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。
Claims (10)
1.一种数据库查询脚本的生成方法,其特征在于,包括:
获得查询请求,所述查询请求中至少包括查询参数;
根据所述查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder;其中,所述第一TreeBuilder集合包括至少两个TreeBuilder,所述第一TreeBuilder集合中的每个TreeBuilder的构造逻辑不同;
基于所述目标TreeBuilder,生成分析树;
基于所述分析树,生成查询脚本,所述查询脚本用于根据所述查询参数在数据库中进行数据查询。
2.根据权利要求1所述的方法,其特征在于,在基于所述分析树,生成查询脚本之前,所述方法还包括:
在第二TreeBuilder集合中确定目标优化树逻辑OptimizeTreeBuilder;其中,所述第二TreeBuilder集合中包括至少一个OptimizeTreeBuilder,所述第二TreeBuilder集合中的每个OptimizeTreeBuilder的构造逻辑不同;
基于所述目标OptimizeTreeBuilder,对所述分析树进行优化操作。
3.根据权利要求1所述的方法,其特征在于,还包括:
执行所述查询脚本,以得到查询结果。
4.根据权利要求1所述的方法,其特征在于,基于所述分析树,生成查询脚本,包括:
基于所述分析树中的构造逻辑,获取当前查询所涉及的维度表和至少两个事实表;
将所述至少两个事实表依次关联到所述维度表上,得到所述维度表与全部所述事实表进行关联的关联结果;
利用所述关联结果构造数据库的查询脚本。
5.根据权利要求1所述的方法,其特征在于,所述查询参数至少包括过滤条件,则基于所述分析树,生成查询脚本,包括:
找出所述分析树的所有叶子节点,其中,每个所述叶子节点对应一个表;
提取所述查询参数中的过滤条件,从所述查询参数的过滤条件中筛选出与所述叶子节点对应的各个表中的分区键字段一致的分区键字段过滤条件;
依据预设的表和分区键字段的对应关系,将筛选出的分区键字段过滤条件添加到包含所述分区键字段的叶子节点中;
基于调整后的分析树,生成查询脚本。
6.一种数据库查询脚本的生成装置,其特征在于,包括:
请求获得单元,用于获得查询请求,所述查询请求中至少包括查询参数;
目标确定单元,用于根据所述查询参数,在第一TreeBuilder集合中确定与所述查询参数相对应的目标TreeBuilder;其中,所述第一TreeBuilder集合包括至少两个TreeBuilder,所述第一TreeBuilder集合中的每个TreeBuilder的构造逻辑不同;
分析树生成单元,用于基于所述目标TreeBuilder,生成分析树;
脚本生成单元,用于基于所述分析树,生成查询脚本,所述查询脚本用于根据所述查询参数在数据库中进行数据查询。
7.根据权利要求6所述的装置,其特征在于,还包括:
扩展处理单元,用于在所述脚本生成单元生成查询脚本之前,在第二TreeBuilder集合中确定目标OptimizeTreeBuilder;其中,所述第二TreeBuilder集合中包括至少一个OptimizeTreeBuilder,所述第二TreeBuilder集合中的每个OptimizeTreeBuilder的构造逻辑不同;再基于所述目标OptimizeTreeBuilder,对所述分析树进行优化操作。
8.根据权利要求6所述的装置,其特征在于,还包括:
脚本执行单元,用于执行所述查询脚本,以得到查询结果。
9.一种存储介质,其特征在于,所述存储介质包括存储的程序,其中,在所述程序运行时控制所述存储介质所在设备执行权利要求1至4中任意一项所述的数据库查询脚本的生成方法。
10.一种处理器,其特征在于,所述处理器用于运行程序,其中,所述程序运行时执行权利要求1至4中任意一项所述的数据库查询脚本的生成方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710905876.4A CN110019296B (zh) | 2017-09-29 | 2017-09-29 | 数据库查询脚本的生成方法、装置、存储介质及处理器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710905876.4A CN110019296B (zh) | 2017-09-29 | 2017-09-29 | 数据库查询脚本的生成方法、装置、存储介质及处理器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110019296A CN110019296A (zh) | 2019-07-16 |
CN110019296B true CN110019296B (zh) | 2021-04-23 |
Family
ID=67186466
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710905876.4A Active CN110019296B (zh) | 2017-09-29 | 2017-09-29 | 数据库查询脚本的生成方法、装置、存储介质及处理器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110019296B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113836163A (zh) * | 2020-06-23 | 2021-12-24 | 南京中兴软件有限责任公司 | 数据的关联查询方法、装置、设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8331657B2 (en) * | 2006-09-13 | 2012-12-11 | Aurilab, Llc | Robust pattern recognition system and method using socratic agents |
CN103729392A (zh) * | 2012-10-10 | 2014-04-16 | 株式会社特博睿 | 查询优化方法及查询编译器 |
CN104239214A (zh) * | 2014-09-29 | 2014-12-24 | 广州视源电子科技股份有限公司 | 一种配置测试脚本的方法与装置 |
CN106202066A (zh) * | 2016-07-05 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 网站的翻译方法和装置 |
CN106776639A (zh) * | 2015-11-24 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 基于结构化查询语言的数据处理方法及数据处理装置 |
CN106814997A (zh) * | 2015-11-27 | 2017-06-09 | 阿里巴巴集团控股有限公司 | 数据库操作语言脚本优化方法、装置及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TWI390443B (zh) * | 2009-08-04 | 2013-03-21 | Univ Nat Taiwan Science Tech | 使用在可擴展性標示語言之串流路徑查詢機制系統與方法 |
-
2017
- 2017-09-29 CN CN201710905876.4A patent/CN110019296B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8331657B2 (en) * | 2006-09-13 | 2012-12-11 | Aurilab, Llc | Robust pattern recognition system and method using socratic agents |
CN103729392A (zh) * | 2012-10-10 | 2014-04-16 | 株式会社特博睿 | 查询优化方法及查询编译器 |
CN104239214A (zh) * | 2014-09-29 | 2014-12-24 | 广州视源电子科技股份有限公司 | 一种配置测试脚本的方法与装置 |
CN106776639A (zh) * | 2015-11-24 | 2017-05-31 | 腾讯科技(深圳)有限公司 | 基于结构化查询语言的数据处理方法及数据处理装置 |
CN106814997A (zh) * | 2015-11-27 | 2017-06-09 | 阿里巴巴集团控股有限公司 | 数据库操作语言脚本优化方法、装置及系统 |
CN106202066A (zh) * | 2016-07-05 | 2016-12-07 | 腾讯科技(深圳)有限公司 | 网站的翻译方法和装置 |
Non-Patent Citations (2)
Title |
---|
XQuery 在 XML 流上查询的结构化连接;吴晓勇,张昱,孙东海;《计算机工程》;20080229;63-70 * |
基于启发式规则的SPARQL本体查询;谭立威,邵志清,张欢欢,蒋宇一,胡芳槐;《华东理工大学学报(自然科学版)》;20161231;851-857 * |
Also Published As
Publication number | Publication date |
---|---|
CN110019296A (zh) | 2019-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP5298117B2 (ja) | 分散コンピューティングにおけるデータマージング | |
CN107015853B (zh) | 多阶段任务的实现方法和装置 | |
CN111241073B (zh) | 一种数据质量检查方法及装置 | |
CN111813805A (zh) | 一种数据处理方法及装置 | |
CN109379398B (zh) | 一种数据同步方法及装置 | |
CN112487083B (zh) | 一种数据校验方法和设备 | |
EP3640813B1 (en) | Cluster-based random walk method and apparatus | |
CN110019298B (zh) | 数据处理方法和装置 | |
CN111125174A (zh) | 数据导出方法、装置、存储介质、电子设备 | |
CN107451204B (zh) | 一种数据查询方法、装置及设备 | |
CN111026709B (zh) | 基于集群访问的数据处理方法及装置 | |
CN110020004B (zh) | 一种数据计算方法及引擎 | |
CN110019296B (zh) | 数据库查询脚本的生成方法、装置、存储介质及处理器 | |
CN112506992B (zh) | Kafka数据的模糊查询方法、装置、电子设备和存储介质 | |
CN108241620B (zh) | 查询脚本的生成方法及装置 | |
CN110825764A (zh) | 一种sql脚本的生成方法、系统、存储介质和处理器 | |
US20160306972A1 (en) | Virus signature matching method and apparatus | |
CN111125087B (zh) | 数据的存储方法及装置 | |
CN111125157B (zh) | 查询数据的处理方法、装置、存储介质及处理器 | |
CN110909072B (zh) | 一种数据表建立方法、装置及设备 | |
CN110109986B (zh) | 任务处理方法、系统、服务器及任务调度系统 | |
CN110019497B (zh) | 一种数据读取方法及装置 | |
CN108241624B (zh) | 一种查询脚本的生成方法及装置 | |
CN110968555A (zh) | 维度数据处理方法和装置 | |
CN111159192B (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100080 No. 401, 4th Floor, Haitai Building, 229 North Fourth Ring Road, Haidian District, Beijing Applicant after: Beijing Guoshuang Technology Co.,Ltd. Address before: 100086 Beijing city Haidian District Shuangyushu Area No. 76 Zhichun Road cuigongfandian 8 layer A Applicant before: Beijing Guoshuang Technology Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |