数据的查询方法及装置、存储介质和电子设备与流程

1.本技术涉及大数据技术领域,具体而言,涉及一种数据的查询方法及装置、存储介质和电子设备。
背景技术:
2.在编写sql(结构化查询语言)进行数据查询的过程中,有时会涉及用时间字段去查询数据。相关技术中,若在查询过程中,筛选条件使用到unix_timestamp()函数(数据库中获取时间戳的函数),且如果扫描的分区字段与unix_timestamp()函数没有匹配的时间戳便会全表扫描,因为这个函数是不确定函数会扫描全表才能得出数据。而且,全表扫描是一个全量的过程,过程中会涉及到大量和结果完全无关的数据。另外,无论在mysql数据库中或者是hive数据库中,使用到unix_timestamp()不确定函数都会导致全表扫描。因此,若在sql(结构化查询语言)中使用unix_timestamp()函数,会消耗数据库资源,导致数据库资源占用率过高,从而会影响数据库的响应速度,严重的会导致使用数据库的所用应用程序的卡顿。
3.另外,当今是数据的时代,大数据领域正在蓬勃发展,越来越多企业,特别是中大型企业,出于对数据产出时间的考虑,往往会建设一个优化sql(结构化查询语言)查询时间的比较完善的方法。而且,许多企业每天都有大量的基于数据库的数据分析需求,若有大量的sql(结构化查询语言)触发了unix_timestamp()函数的使用场景,则必然会影响查询数据的效率和整个分析数据的效率。
4.针对相关技术中在数据库中以时间字段查询数据时,会导致出现全表扫描的情况,从而导致数据库资源占用率过高,进而会导致查询数据的效率较低的问题,目前尚未提出有效的解决方案。
技术实现要素:
5.本技术的主要目的在于提供一种数据的查询方法及装置、存储介质和电子设备,以解决相关技术中在数据库中以时间字段查询数据时,会导致出现全表扫描的情况,从而导致数据库资源占用率过高,进而会导致查询数据的效率较低的问题。
6.为了实现上述目的,根据本技术的一个方面,提供了一种数据的查询方法。该方法包括:接收目标对象发送的第一语句,其中,所述第一语句用于在数据库中用时间字段查询目标数据;对所述第一语句进行解析,得到解析结果;依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果,其中,所述目标函数为所述数据库中获取时间戳的函数;基于所述检查结果在所述数据库中用时间字段查询所述目标数据。
7.进一步地,依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果包括:依据所述解析结果,得到所述第一语句对应的抽象语法树;遍历所述抽象语法树的节点,得到遍历结果;依据所述遍历结果检查所述第一语句,得到所述检查结果,其中,所述检查结果用于表示所述第一语句中是否存在所述目标函数。
8.进一步地,依据所述遍历结果检查所述第一语句,得到所述检查结果包括:依据所述遍历结果,确定所述抽象语法树中是否存在目标节点,其中,所述目标节点为在所述数据库中用于查询数据的节点;若所述抽象语法树中不存在所述目标节点,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述抽象语法树中存在所述目标节点,则获取所述目标节点中的n个函数,其中,n为正整数;基于所述n个函数检查所述第一语句,得到所述检查结果。
9.进一步地,基于所述n个函数检查所述第一语句,得到所述检查结果包括:判断所述n个函数中是否存在所述目标函数;若所述n个函数中存在所述目标函数,则表示所述第一语句中存在所述目标函数;若所述n个函数中不存在所述目标函数,则表示所述第一语句中不存在所述目标函数。
10.进一步地,基于所述检查结果在所述数据库中用时间字段查询所述目标数据包括:若所述检查结果表示所述第一语句中不存在所述目标函数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述检查结果表示所述第一语句中存在所述目标函数,则判断所述目标函数中是否有参数,得到判断结果;依据所述判断结果在所述数据库中用时间字段查询所述目标数据。
11.进一步地,依据所述判断结果在所述数据库中用时间字段查询所述目标数据包括:若所述判断结果表示所述目标函数中有所述参数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述判断结果表示所述目标函数中没有所述参数,则向所述目标对象发送提醒信息,其中,所述提醒信息用于提醒所述目标对象在所述目标函数中添加所述参数;获取所述目标对象在所述目标函数中添加所述参数之后的第二语句;执行所述第二语句,并在所述数据库中用时间字段查询所述目标数据。
12.进一步地,在对所述第一语句进行解析,得到解析结果之后,所述方法还包括:依据所述解析结果,确定对所述第一语句是否解析成功;若对所述第一语句解析成功,则得到所述第一语句对应的抽象语法树;若对所述第一语句解析失败,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据。
13.为了实现上述目的,根据本技术的另一方面,提供了一种数据的查询装置。该装置包括:第一接收单元,用于接收目标对象发送的第一语句,其中,所述第一语句用于在数据库中用时间字段查询目标数据;第一解析单元,用于对所述第一语句进行解析,得到解析结果;第一检查单元,用于依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果,其中,所述目标函数为所述数据库中获取时间戳的函数;第一查询单元,用于基于所述检查结果在所述数据库中用时间字段查询所述目标数据。
14.进一步地,所述第一检查单元包括:第一确定子单元,用于依据所述解析结果,得到所述第一语句对应的抽象语法树;第一遍历子单元,用于遍历所述抽象语法树的节点,得到遍历结果;第一检查子单元,用于依据所述遍历结果检查所述第一语句,得到所述检查结果,其中,所述检查结果用于表示所述第一语句中是否存在所述目标函数。
15.进一步地,所述第一检查子单元包括:第一确定模块,用于依据所述遍历结果,确定所述抽象语法树中是否存在目标节点,其中,所述目标节点为在所述数据库中用于查询数据的节点;第一执行模块,用于若所述抽象语法树中不存在所述目标节点,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;第一获取模块,用于若所述抽象
语法树中存在所述目标节点,则获取所述目标节点中的n个函数,其中,n为正整数;第一检查模块,用于基于所述n个函数检查所述第一语句,得到所述检查结果。
16.进一步地,所述第一检查模块包括:第一判断子模块,用于判断所述n个函数中是否存在所述目标函数;第一确定子模块,用于若所述n个函数中存在所述目标函数,则表示所述第一语句中存在所述目标函数;第二确定子模块,用于若所述n个函数中不存在所述目标函数,则表示所述第一语句中不存在所述目标函数。
17.进一步地,所述第一查询单元包括:第一执行子单元,用于若所述检查结果表示所述第一语句中不存在所述目标函数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;第一判断子单元,用于若所述检查结果表示所述第一语句中存在所述目标函数,则判断所述目标函数中是否有参数,得到判断结果;第一查询子单元,用于依据所述判断结果在所述数据库中用时间字段查询所述目标数据。
18.进一步地,所述第一查询子单元包括:第二执行模块,用于若所述判断结果表示所述目标函数中有所述参数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;第一发送模块,用于若所述判断结果表示所述目标函数中没有所述参数,则向所述目标对象发送提醒信息,其中,所述提醒信息用于提醒所述目标对象在所述目标函数中添加所述参数;第二获取模块,用于获取所述目标对象在所述目标函数中添加所述参数之后的第二语句;第三执行模块,用于执行所述第二语句,并在所述数据库中用时间字段查询所述目标数据。
19.进一步地,所述装置还包括:第一确定单元,用于在对所述第一语句进行解析,得到解析结果之后,依据所述解析结果,确定对所述第一语句是否解析成功;第二确定单元,用于若对所述第一语句解析成功,则得到所述第一语句对应的抽象语法树;第一执行单元,用于若对所述第一语句解析失败,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据。
20.为了实现上述目的,根据本技术的另一方面,提供了一种计算机可读存储介质,所述存储介质存储程序,其中,所述程序执行上述的任意一项所述的数据的查询方法。
21.为了实现上述目的,根据本技术的另一方面,提供了一种电子设备,所述电子设备包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现上述的任意一项所述的数据的查询方法。
22.通过本技术,采用以下步骤:接收目标对象发送的第一语句,其中,第一语句用于在数据库中用时间字段查询目标数据;对第一语句进行解析,得到解析结果;依据解析结果检查第一语句中是否存在目标函数,得到检查结果,其中,目标函数为数据库中获取时间戳的函数;基于检查结果在数据库中用时间字段查询目标数据,解决了相关技术中在数据库中以时间字段查询数据时,会导致出现全表扫描的情况,从而导致数据库资源占用率过高,进而会导致查询数据的效率较低的问题。通过对用于在数据库中用时间字段查询目标数据的第一语句进行解析,得到解析结果,并依据解析结果检查第一语句中是否存在数据库中获取时间戳的目标函数,得到检查结果,再基于检查结果在数据库中用时间字段查询目标数据,避免在数据库中以时间字段查询数据时出现全表扫描的情况,从而可以降低数据库资源的占用率,进而达到了提升查询数据的效率的效果。
附图说明
23.构成本技术的一部分的附图用来提供对本技术的进一步理解,本技术的示意性实施例及其说明用于解释本技术,并不构成对本技术的不当限定。在附图中:
24.图1是根据本技术实施例提供的数据的查询方法的流程图;
25.图2是根据本技术实施例提供的数据的查询方法的流程图一;
26.图3是根据本技术实施例提供的可选的数据的查询方法的流程图;
27.图4是根据本技术实施例提供的数据的查询装置的示意图;
28.图5是根据本技术实施例提供的电子设备的示意图。
具体实施方式
29.需要说明的是,在不冲突的情况下,本技术中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本技术。
30.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
31.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
32.需要说明的是,本技术所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
33.为了便于描述,以下对本技术实施例涉及的部分名词或术语进行说明:
34.unix_timestamp函数:数据库中获取时间戳的函数,若函数中不加参数,则获取当前时间戳,若函数中添加string date参数(自定义的时间戳参数),则得到参数对应的时间戳。
35.sql(structured query language)是一种用于管理关系型数据库的标准语言。它允许用户通过插入、更新、查询和删除数据库中的数据。sql语言的语法简单易懂,使用sql可以轻松地查询和管理数据库。
36.mysql是一种开源的关系型数据库管理系统,它支持sql语言,并且可以运行在各种操作系统平台上。
37.hive是一个用于存储和查询大量数据的open source数据库。使用hive,可以将大规模数据存储在文件系统中,并使用sql或嵌入语言进行查询。hive还提供了丰富的函数和
聚合函数,可以对数据进行各种操作。同时,hive还支持多种缓存机制,可以提高查询效率。
38.oracle是一种关系型数据库管理系统。它是一种高性能和可扩展的数据库管理系统,可以运行在各种操作系统平台上。
39.抽象语法树(abstract syntax tree,简称ast)是一种表示程序语言语法结构的树模型。它是一种抽象的语法树,它不仅表示源代码中的语法结构,还能够表示语言的语法规则和语句的逻辑关系。
40.sqlnode是一个用于表示sql查询语句的语法树。
41.antlr(antimalware tool rating)是一款语法分析器和安全软件评估工具。它使用混合语法和动态分析来识别和评估各种安全软件的语法表达式和动作。
42.javacc是一个语法解析器,它用于解析源代码并可以将其转换为汇编代码。
43.下面结合优选的实施步骤对本发明进行说明,图1是根据本技术实施例提供的数据的查询方法的流程图,如图1所示,该方法包括如下步骤:
44.步骤s101,接收目标对象发送的第一语句,其中,第一语句用于在数据库中用时间字段查询目标数据。
45.例如,当用户(上述的目标对象)在编写sql语句(上述的第一语句)时,且该sql语句(上述的第一语句)用于以时间字段去查询数据库中的数据(上述的目标数据),设备或者装置可以接收用户(上述的目标对象)提交的编写的sql语句(上述的第一语句),且该用户提交的该sql语句是用于以时间字段去查询数据库中的数据(上述的目标数据)。
46.步骤s102,对第一语句进行解析,得到解析结果。
47.例如,设备或者装置中的解析与判断模块可以负责将用户(上述的目标对象)提交的sql语句进行解析。
48.步骤s103,依据解析结果检查第一语句中是否存在目标函数,得到检查结果,其中,目标函数为数据库中获取时间戳的函数。
49.例如,在对用户(上述的目标对象)提交的sql语句进行解析之后,可以判断用户(上述的目标对象)提交的sql语句是否使用了unix_timestamp()函数,且unix_timestamp函数是数据库中获取时间戳的函数。
50.步骤s104,基于检查结果在数据库中用时间字段查询目标数据。
51.例如,如果用户(上述的目标对象)提交的sql语句使用了unix_timestamp()函数,则继续判断unix_timestamp()函数中是否有参数,再根据unix_timestamp()函数中是否有参数的判断结果在数据库中用时间字段查询目标数据;如果用户(上述的目标对象)提交的sql语句没有使用unix_timestamp()函数,则继续执行该用户(上述的目标对象)提交的sql语句,并在数据库中用时间字段查询目标数据。
52.需要说明的是,本技术实施例提供的数据的查询方法可以应用于金融场景中。
53.通过上述的步骤s101至s104,通过对用于在数据库中用时间字段查询目标数据的第一语句进行解析,得到解析结果,并依据解析结果检查第一语句中是否存在数据库中获取时间戳的目标函数,得到检查结果,再基于检查结果在数据库中用时间字段查询目标数据,避免在数据库中以时间字段查询数据时出现全表扫描的情况,从而可以降低数据库资源的占用率,进而达到了提升查询数据的效率的效果。
54.可选地,在本技术实施例提供的数据的查询方法中,在对第一语句进行解析,得到
解析结果之后,该方法还包括:依据解析结果,确定对第一语句是否解析成功;若对第一语句解析成功,则得到第一语句对应的抽象语法树;若对第一语句解析失败,则执行第一语句,并在数据库中用时间字段查询目标数据。
55.例如,解析与判断模块可以负责将用户(上述的目标对象)提交的sql语句(上述的第一语句)进行解析。而且,解析与判断模块可以使用通用的语法解析器,接收用户(上述的目标对象)提交的sql语句(上述的第一语句)解析,并得到抽象语法树。且语法解析器可以支持语法扩展,以支持mysql数据库、oracle数据库、hive数据库等多种数据源不同语法的解析需要。如:开源的语法解析器antlr、javacc,通过扩展语法规则文件即可实现多数据源语法支持。calcite(一种开源的动态数据管理框架)、druid(一种分布式数据分析平台或者一种时序数据库或者集群系统)则内置编程式语法解析器。也即,解析与判断模块可以通过语法解析器解析调用方(上述的目标对象)传入的sql语句(上述的第一语句);若解析成功,则得到sql语句(上述的第一语句)对应的抽象语法树;若解析失败,则直接放行,也即,若解析失败,则可以直接执行用户(上述的目标对象)提交的sql语句(上述的第一语句),并通过执行用户(上述的目标对象)提交的sql语句(上述的第一语句),在数据库中用时间字段查询上述的目标数据。
56.通过上述的方案,可以快速准确的对用户提交的sql语句进行解析。
57.可选地,在本技术实施例提供的数据的查询方法中,依据解析结果检查第一语句中是否存在目标函数,得到检查结果包括:依据解析结果,得到第一语句对应的抽象语法树;遍历抽象语法树的节点,得到遍历结果;依据遍历结果检查第一语句,得到检查结果,其中,检查结果用于表示第一语句中是否存在目标函数。
58.例如,解析与判断模块可以负责将用户(上述的目标对象)提交的sql语句(上述的第一语句)进行解析,并在拿到抽象语法树之后遍历抽象语法树的所有节点,将涉及的问题sql语句筛选出来。比如,解析与判断模块在通过语法解析器解析调用方(上述的目标对象)传入的sql语句(上述的第一语句)时,且对sql语句(上述的第一语句)解析成功时,可以得到sql语句(上述的第一语句)对应的抽象语法树。然后可以递归检查传入的sql语句(上述的第一语句)的所有节点,并在递归检查传入的sql语句(上述的第一语句)的所有节点之后,判断用户(上述的目标对象)提交的sql语句(上述的第一语句)中是否使用了用于在数据库中获取时间戳的unix_timestamp()函数。
59.通过上述的方案,可以快速准确的得到用户提交的sql语句对应的抽象语法树,从而可以快速准确的检查抽象语法树的节点。
60.可选地,在本技术实施例提供的数据的查询方法中,依据遍历结果检查第一语句,得到检查结果包括:依据遍历结果,确定抽象语法树中是否存在目标节点,其中,目标节点为在数据库中用于查询数据的节点;若抽象语法树中不存在目标节点,则执行第一语句,并在数据库中用时间字段查询目标数据;若抽象语法树中存在目标节点,则获取目标节点中的n个函数,其中,n为正整数;基于n个函数检查第一语句,得到检查结果。
61.例如,在遍历sql语句(上述的第一语句)对应的抽象语法树时,可以递归检查抽象语法树的所有where节点(表示查询数据的节点,上述的目标节点),若抽象语法树中无where节点,则直接放行,也即,若抽象语法树中无where节点,则可以直接执行用户(上述的目标对象)提交的sql语句(上述的第一语句),并通过执行用户(上述的目标对象)提交的
sql语句(上述的第一语句),在数据库中用时间字段查询上述的目标数据;若抽象语法树中有where节点,则获取where节点中的多个函数(上述的n个函数),并根据多个函数(上述的n个函数),检查用户(上述的目标对象)提交的sql语句是否使用了unix_timestamp()函数。
62.通过上述的方案,可以快速准确的检查用户提交的sql语句中是否有用于查询数据的where节点。
63.可选地,在本技术实施例提供的数据的查询方法中,基于n个函数检查第一语句,得到检查结果包括:判断n个函数中是否存在目标函数;若n个函数中存在目标函数,则表示第一语句中存在目标函数;若n个函数中不存在目标函数,则表示第一语句中不存在目标函数。
64.例如,判断上述的n个函数中是否涉及unix_timestamp()函数;如果上述的n个函数中涉及unix_timestamp()函数,则表示用户(上述的目标对象)提交的sql语句使用了unix_timestamp()函数;如果上述的n个函数中不涉及unix_timestamp()函数,则表示用户(上述的目标对象)提交的sql语句没有使用unix_timestamp()函数。
65.通过上述的方案,可以快速准确的检查用户提交的sql语句是否使用了用于在数据库中获取时间戳的unix_timestamp()函数。
66.图2是根据本技术实施例提供的数据的查询方法的流程图一,如图2所示,在本技术实施例提供的数据的查询方法中,基于检查结果在数据库中用时间字段查询目标数据包括:
67.步骤s201,若检查结果表示第一语句中不存在目标函数,则执行第一语句,并在数据库中用时间字段查询目标数据;
68.步骤s202,若检查结果表示第一语句中存在目标函数,则判断目标函数中是否有参数,得到判断结果;
69.步骤s203,依据判断结果在数据库中用时间字段查询目标数据。
70.例如,如果用户(上述的目标对象)提交的sql语句中没有使用unix_timestamp()函数(上述的目标函数),则可以直接执行用户(上述的目标对象)提交的sql语句(上述的第一语句),并通过执行用户(上述的目标对象)提交的sql语句(上述的第一语句),在数据库中用时间字段查询上述的目标数据;如果用户(上述的目标对象)提交的sql语句中使用了unix_timestamp()函数(上述的目标函数),则判断unix_timestamp()函数(上述的目标函数)中是否有参数,并在判断unix_timestamp()函数(上述的目标函数)中是否有参数之后,数据库中用时间字段查询上述的目标数据。
71.通过上述的方案,可以快速准确的检查用户提交的sql语句中的unix_timestamp()函数中是否有参数。
72.可选地,在本技术实施例提供的数据的查询方法中,依据判断结果在数据库中用时间字段查询目标数据包括:若判断结果表示目标函数中有参数,则执行第一语句,并在数据库中用时间字段查询目标数据;若判断结果表示目标函数中没有参数,则向目标对象发送提醒信息,其中,提醒信息用于提醒目标对象在目标函数中添加参数;获取目标对象在目标函数中添加参数之后的第二语句;执行第二语句,并在数据库中用时间字段查询目标数据。
73.例如,判断unix_timestamp()函数(上述的目标函数)是否有参数,若添加了参数,
可以直接执行用户(上述的目标对象)提交的sql语句(上述的第一语句),并通过执行用户(上述的目标对象)提交的sql语句(上述的第一语句),在数据库中用时间字段查询上述的目标数据;若没有添加参数,则跳转至命中规则,添加至命中列表,且用户(上述的目标对象)提交的sql语句(上述的第一语句)被禁止执行,并可以向用户(上述的目标对象)发送整改该sql语句(上述的第一语句)的整改信息,且在用户在之前提交的sql语句(上述的第一语句)中加入参数之后,再执行添加了参数的sql语句(上述的第二语句),并通过执行添加了参数的sql语句(上述的第二语句),在数据库中用时间字段查询上述的目标数据。
74.通过上述的方案,可以快速准确的在数据库中用时间字段查询数据。
75.例如,图3是根据本技术实施例提供的可选的数据的查询方法的流程图,如图3所示,可选的数据的查询方法包括包括如下步骤:
76.步骤301:传入任务开始执行,也即,接收用户提交的sql语句。
77.步骤302:解析与判断模块可以负责将用户提交的sql语句进行解析,拿到sqlnode语法树后遍历所有节点,将涉及的问题sql语句筛选出来。
78.而且,解析与判断模块可以使用通用的语法解析器,接收sql语句解析得到抽象语法树。且解析器支持语法扩展,以支持mysql数据库、oracle数据库、hive数据库等多种数据源不同语法的解析需要。如:开源的语法解析器antlr、javacc,通过扩展语法规则文件即可实现多数据源语法支持。calcite(一种开源的动态数据管理框架)、druid(一种分布式数据分析平台或者一种时序数据库或者集群系统)则内置编程式语法解析器。将用户传入的sql通过解析器解析后,遍历所有节点。
79.也即,步骤302可以解析调用方传入的sql语句。若解析失败,则跳转至步骤303,直接放行。若解析成功,则跳转至步骤304。
80.步骤303:放行sql语句,也即,直接执行sql语句。
81.步骤304:递归检查传入sql(sqlnode语法树)的所有where节点,若传入的sql无where节点,则跳转至步骤305,sql直接放行。若传入的sql有where节点,则跳转至步骤306。
82.步骤305:放行sql语句,也即,直接执行sql语句。
83.步骤306:获取where节点中的函数,获取后跳转至步骤307。
84.步骤307:判断函数中是否涉及unix_timestamp()函数,若不涉及,则跳转至步骤308,遍历下一个where节点,若涉及,则跳转至步骤309。
85.步骤308:检查下一个where节点。
86.步骤309:判断unix_timestamp()函数是否有参数,若添加了参数,则跳转至步骤310,检查下一个where节点的unix_timestamp()函数;若没有添加参数,则跳转至步骤311命中规则,添加至命中列表,sql被禁止执行。
87.步骤310:检查下一个where节点的unix_timestamp()函数。
88.步骤311:命中规则,添加到命中列表。
89.通过本技术实施例提供的方法,提供了一种unix_timestamp()函数的检查方法与装置,依据提交的sql进行检查是否使用unix_timestamp()函数,此装置提供了更为灵活的unix_timestamp()函数扫描检查。
90.而且,本实施例提供的一种unix_timestamp()函数的检查方法与装置,通过将用户传入的sql进行解析,解析后判断是否使用了unix_timestamp()函数,如果使用了,sql
判断命中规则,禁止sql继续执行,最后,返回检查结果给调用方。
91.综上,本技术实施例提供的数据的查询方法,通过接收目标对象发送的第一语句,其中,第一语句用于在数据库中用时间字段查询目标数据;对第一语句进行解析,得到解析结果;依据解析结果检查第一语句中是否存在目标函数,得到检查结果,其中,目标函数为数据库中获取时间戳的函数;基于检查结果在数据库中用时间字段查询目标数据,解决了相关技术中在数据库中以时间字段查询数据时,会导致出现全表扫描的情况,从而导致数据库资源占用率过高,进而会导致查询数据的效率较低的问题。通过对用于在数据库中用时间字段查询目标数据的第一语句进行解析,得到解析结果,并依据解析结果检查第一语句中是否存在数据库中获取时间戳的目标函数,得到检查结果,再基于检查结果在数据库中用时间字段查询目标数据,避免在数据库中以时间字段查询数据时出现全表扫描的情况,从而可以降低数据库资源的占用率,进而达到了提升查询数据的效率的效果。
92.需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
93.本技术实施例还提供了一种数据的查询装置,需要说明的是,本技术实施例的数据的查询装置可以用于执行本技术实施例所提供的用于数据的查询方法。以下对本技术实施例提供的数据的查询装置进行介绍。
94.图4是根据本技术实施例的数据的查询装置的示意图。如图4所示,该装置包括:第一接收单元401、第一解析单元402、第一检查单元403和第一查询单元404。
95.具体地,第一接收单元401,用于接收目标对象发送的第一语句,其中,第一语句用于在数据库中用时间字段查询目标数据;
96.第一解析单元402,用于对第一语句进行解析,得到解析结果;
97.第一检查单元403,用于依据解析结果检查第一语句中是否存在目标函数,得到检查结果,其中,目标函数为数据库中获取时间戳的函数;
98.第一查询单元404,用于基于检查结果在数据库中用时间字段查询目标数据。
99.综上,本技术实施例提供的数据的查询装置,通过第一接收单元401接收目标对象发送的第一语句,其中,第一语句用于在数据库中用时间字段查询目标数据;第一解析单元402对第一语句进行解析,得到解析结果;第一检查单元403依据解析结果检查第一语句中是否存在目标函数,得到检查结果,其中,目标函数为数据库中获取时间戳的函数;第一查询单元404基于检查结果在数据库中用时间字段查询目标数据,解决了相关技术中在数据库中以时间字段查询数据时,会导致出现全表扫描的情况,从而导致数据库资源占用率过高,进而会导致查询数据的效率较低的问题。通过对用于在数据库中用时间字段查询目标数据的第一语句进行解析,得到解析结果,并依据解析结果检查第一语句中是否存在数据库中获取时间戳的目标函数,得到检查结果,再基于检查结果在数据库中用时间字段查询目标数据,避免在数据库中以时间字段查询数据时出现全表扫描的情况,从而可以降低数据库资源的占用率,进而达到了提升查询数据的效率的效果。
100.可选地,在本技术实施例提供的数据的查询装置中,第一检查单元包括:第一确定子单元,用于依据解析结果,得到第一语句对应的抽象语法树;第一遍历子单元,用于遍历抽象语法树的节点,得到遍历结果;第一检查子单元,用于依据遍历结果检查第一语句,得
到检查结果,其中,检查结果用于表示第一语句中是否存在目标函数。
101.可选地,在本技术实施例提供的数据的查询装置中,第一检查子单元包括:第一确定模块,用于依据遍历结果,确定抽象语法树中是否存在目标节点,其中,目标节点为在数据库中用于查询数据的节点;第一执行模块,用于若抽象语法树中不存在目标节点,则执行第一语句,并在数据库中用时间字段查询目标数据;第一获取模块,用于若抽象语法树中存在目标节点,则获取目标节点中的n个函数,其中,n为正整数;第一检查模块,用于基于n个函数检查第一语句,得到检查结果。
102.可选地,在本技术实施例提供的数据的查询装置中,第一检查模块包括:第一判断子模块,用于判断n个函数中是否存在目标函数;第一确定子模块,用于若n个函数中存在目标函数,则表示第一语句中存在目标函数;第二确定子模块,用于若n个函数中不存在目标函数,则表示第一语句中不存在目标函数。
103.可选地,在本技术实施例提供的数据的查询装置中,第一查询单元包括:第一执行子单元,用于若检查结果表示第一语句中不存在目标函数,则执行第一语句,并在数据库中用时间字段查询目标数据;第一判断子单元,用于若检查结果表示第一语句中存在目标函数,则判断目标函数中是否有参数,得到判断结果;第一查询子单元,用于依据判断结果在数据库中用时间字段查询目标数据。
104.可选地,在本技术实施例提供的数据的查询装置中,第一查询子单元包括:第二执行模块,用于若判断结果表示目标函数中有参数,则执行第一语句,并在数据库中用时间字段查询目标数据;第一发送模块,用于若判断结果表示目标函数中没有参数,则向目标对象发送提醒信息,其中,提醒信息用于提醒目标对象在目标函数中添加参数;第二获取模块,用于获取目标对象在目标函数中添加参数之后的第二语句;第三执行模块,用于执行第二语句,并在数据库中用时间字段查询目标数据。
105.可选地,在本技术实施例提供的数据的查询装置中,该装置还包括:第一确定单元,用于在对第一语句进行解析,得到解析结果之后,依据解析结果,确定对第一语句是否解析成功;第二确定单元,用于若对第一语句解析成功,则得到第一语句对应的抽象语法树;第一执行单元,用于若对第一语句解析失败,则执行第一语句,并在数据库中用时间字段查询目标数据。
106.数据的查询装置包括处理器和存储器,上述第一接收单元401、第一解析单元402、第一检查单元403和第一查询单元404等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
107.处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数来提升查询数据的效率。
108.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram),存储器包括至少一个存储芯片。
109.本发明实施例提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现所述数据的查询方法。
110.本发明实施例提供了一种处理器,所述处理器用于运行程序,其中,所述程序运行时执行所述数据的查询方法。
111.如图5所示,本发明实施例提供了一种电子设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:接收目标对象发送的第一语句,其中,所述第一语句用于在数据库中用时间字段查询目标数据;对所述第一语句进行解析,得到解析结果;依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果,其中,所述目标函数为所述数据库中获取时间戳的函数;基于所述检查结果在所述数据库中用时间字段查询所述目标数据。
112.处理器执行程序时还实现以下步骤:依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果包括:依据所述解析结果,得到所述第一语句对应的抽象语法树;遍历所述抽象语法树的节点,得到遍历结果;依据所述遍历结果检查所述第一语句,得到所述检查结果,其中,所述检查结果用于表示所述第一语句中是否存在所述目标函数。
113.处理器执行程序时还实现以下步骤:依据所述遍历结果检查所述第一语句,得到所述检查结果包括:依据所述遍历结果,确定所述抽象语法树中是否存在目标节点,其中,所述目标节点为在所述数据库中用于查询数据的节点;若所述抽象语法树中不存在所述目标节点,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述抽象语法树中存在所述目标节点,则获取所述目标节点中的n个函数,其中,n为正整数;基于所述n个函数检查所述第一语句,得到所述检查结果。
114.处理器执行程序时还实现以下步骤:基于所述n个函数检查所述第一语句,得到所述检查结果包括:判断所述n个函数中是否存在所述目标函数;若所述n个函数中存在所述目标函数,则表示所述第一语句中存在所述目标函数;若所述n个函数中不存在所述目标函数,则表示所述第一语句中不存在所述目标函数。
115.处理器执行程序时还实现以下步骤:基于所述检查结果在所述数据库中用时间字段查询所述目标数据包括:若所述检查结果表示所述第一语句中不存在所述目标函数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述检查结果表示所述第一语句中存在所述目标函数,则判断所述目标函数中是否有参数,得到判断结果;依据所述判断结果在所述数据库中用时间字段查询所述目标数据。
116.处理器执行程序时还实现以下步骤:依据所述判断结果在所述数据库中用时间字段查询所述目标数据包括:若所述判断结果表示所述目标函数中有所述参数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述判断结果表示所述目标函数中没有所述参数,则向所述目标对象发送提醒信息,其中,所述提醒信息用于提醒所述目标对象在所述目标函数中添加所述参数;获取所述目标对象在所述目标函数中添加所述参数之后的第二语句;执行所述第二语句,并在所述数据库中用时间字段查询所述目标数据。
117.处理器执行程序时还实现以下步骤:在对所述第一语句进行解析,得到解析结果之后,所述方法还包括:依据所述解析结果,确定对所述第一语句是否解析成功;若对所述第一语句解析成功,则得到所述第一语句对应的抽象语法树;若对所述第一语句解析失败,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据。
118.本文中的设备可以是服务器、pc、pad、手机等。
119.本技术还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序:接收目标对象发送的第一语句,其中,所述第一语句用于在数
据库中用时间字段查询目标数据;对所述第一语句进行解析,得到解析结果;依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果,其中,所述目标函数为所述数据库中获取时间戳的函数;基于所述检查结果在所述数据库中用时间字段查询所述目标数据。
120.当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果包括:依据所述解析结果,得到所述第一语句对应的抽象语法树;遍历所述抽象语法树的节点,得到遍历结果;依据所述遍历结果检查所述第一语句,得到所述检查结果,其中,所述检查结果用于表示所述第一语句中是否存在所述目标函数。
121.当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:依据所述遍历结果检查所述第一语句,得到所述检查结果包括:依据所述遍历结果,确定所述抽象语法树中是否存在目标节点,其中,所述目标节点为在所述数据库中用于查询数据的节点;若所述抽象语法树中不存在所述目标节点,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述抽象语法树中存在所述目标节点,则获取所述目标节点中的n个函数,其中,n为正整数;基于所述n个函数检查所述第一语句,得到所述检查结果。
122.当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:基于所述n个函数检查所述第一语句,得到所述检查结果包括:判断所述n个函数中是否存在所述目标函数;若所述n个函数中存在所述目标函数,则表示所述第一语句中存在所述目标函数;若所述n个函数中不存在所述目标函数,则表示所述第一语句中不存在所述目标函数。
123.当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:基于所述检查结果在所述数据库中用时间字段查询所述目标数据包括:若所述检查结果表示所述第一语句中不存在所述目标函数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述检查结果表示所述第一语句中存在所述目标函数,则判断所述目标函数中是否有参数,得到判断结果;依据所述判断结果在所述数据库中用时间字段查询所述目标数据。
124.当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:依据所述判断结果在所述数据库中用时间字段查询所述目标数据包括:若所述判断结果表示所述目标函数中有所述参数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述判断结果表示所述目标函数中没有所述参数,则向所述目标对象发送提醒信息,其中,所述提醒信息用于提醒所述目标对象在所述目标函数中添加所述参数;获取所述目标对象在所述目标函数中添加所述参数之后的第二语句;执行所述第二语句,并在所述数据库中用时间字段查询所述目标数据。
125.当在数据处理设备上执行时,还适于执行初始化有如下方法步骤的程序:在对所述第一语句进行解析,得到解析结果之后,所述方法还包括:依据所述解析结果,确定对所述第一语句是否解析成功;若对所述第一语句解析成功,则得到所述第一语句对应的抽象语法树;若对所述第一语句解析失败,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据。
126.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实
施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
127.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
128.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
129.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
130.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
131.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。存储器是计算机可读介质的示例。
132.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
133.还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
134.本领域技术人员应明白,本技术的实施例可提供为方法、系统或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形
式。
135.以上仅为本技术的实施例而已,并不用于限制本技术。对于本领域技术人员来说,本技术可以有各种更改和变化。凡在本技术的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本技术的权利要求范围之内。
技术特征:
1.一种数据的查询方法,其特征在于,包括:接收目标对象发送的第一语句,其中,所述第一语句用于在数据库中用时间字段查询目标数据;对所述第一语句进行解析,得到解析结果;依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果,其中,所述目标函数为所述数据库中获取时间戳的函数;基于所述检查结果在所述数据库中用时间字段查询所述目标数据。2.根据权利要求1所述的方法,其特征在于,依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果包括:依据所述解析结果,得到所述第一语句对应的抽象语法树;遍历所述抽象语法树的节点,得到遍历结果;依据所述遍历结果检查所述第一语句,得到所述检查结果,其中,所述检查结果用于表示所述第一语句中是否存在所述目标函数。3.根据权利要求2所述的方法,其特征在于,依据所述遍历结果检查所述第一语句,得到所述检查结果包括:依据所述遍历结果,确定所述抽象语法树中是否存在目标节点,其中,所述目标节点为在所述数据库中用于查询数据的节点;若所述抽象语法树中不存在所述目标节点,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述抽象语法树中存在所述目标节点,则获取所述目标节点中的n个函数,其中,n为正整数;基于所述n个函数检查所述第一语句,得到所述检查结果。4.根据权利要求3所述的方法,其特征在于,基于所述n个函数检查所述第一语句,得到所述检查结果包括:判断所述n个函数中是否存在所述目标函数;若所述n个函数中存在所述目标函数,则表示所述第一语句中存在所述目标函数;若所述n个函数中不存在所述目标函数,则表示所述第一语句中不存在所述目标函数。5.根据权利要求1所述的方法,其特征在于,基于所述检查结果在所述数据库中用时间字段查询所述目标数据包括:若所述检查结果表示所述第一语句中不存在所述目标函数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述检查结果表示所述第一语句中存在所述目标函数,则判断所述目标函数中是否有参数,得到判断结果;依据所述判断结果在所述数据库中用时间字段查询所述目标数据。6.根据权利要求5所述的方法,其特征在于,依据所述判断结果在所述数据库中用时间字段查询所述目标数据包括:若所述判断结果表示所述目标函数中有所述参数,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据;若所述判断结果表示所述目标函数中没有所述参数,则向所述目标对象发送提醒信
息,其中,所述提醒信息用于提醒所述目标对象在所述目标函数中添加所述参数;获取所述目标对象在所述目标函数中添加所述参数之后的第二语句;执行所述第二语句,并在所述数据库中用时间字段查询所述目标数据。7.根据权利要求1所述的方法,其特征在于,在对所述第一语句进行解析,得到解析结果之后,所述方法还包括:依据所述解析结果,确定对所述第一语句是否解析成功;若对所述第一语句解析成功,则得到所述第一语句对应的抽象语法树;若对所述第一语句解析失败,则执行所述第一语句,并在所述数据库中用时间字段查询所述目标数据。8.一种数据的查询装置,其特征在于,包括:第一接收单元,用于接收目标对象发送的第一语句,其中,所述第一语句用于在数据库中用时间字段查询目标数据;第一解析单元,用于对所述第一语句进行解析,得到解析结果;第一检查单元,用于依据所述解析结果检查所述第一语句中是否存在目标函数,得到检查结果,其中,所述目标函数为所述数据库中获取时间戳的函数;第一查询单元,用于基于所述检查结果在所述数据库中用时间字段查询所述目标数据。9.一种计算机可读存储介质,其特征在于,所述存储介质存储程序,其中,所述程序执行权利要求1至7中任意一项所述的数据的查询方法。10.一种电子设备,其特征在于,包括一个或多个处理器和存储器,所述存储器用于存储一个或多个程序,其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至7中任意一项所述的数据的查询方法。
技术总结
本申请公开了一种数据的查询方法及装置、存储介质和电子设备,涉及大数据技术领域。该方法包括:接收目标对象发送的第一语句,其中,第一语句用于在数据库中用时间字段查询目标数据;对第一语句进行解析,得到解析结果;依据解析结果检查第一语句中是否存在目标函数,得到检查结果,其中,目标函数为数据库中获取时间戳的函数;基于检查结果在数据库中用时间字段查询目标数据。通过本申请,解决了相关技术中在数据库中以时间字段查询数据时,会导致出现全表扫描的情况,从而导致数据库资源占用率过高,进而会导致查询数据的效率较低的问题。进而会导致查询数据的效率较低的问题。进而会导致查询数据的效率较低的问题。
技术研发人员:黄萌 阳万里 单升起 杨济银
受保护的技术使用者:中国工商银行股份有限公司
技术研发日:2023.05.23
技术公布日:2023/8/24
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/