一种查询数据集的方法及装置制造方法

文档序号:6635078阅读:182来源:国知局
一种查询数据集的方法及装置制造方法
【专利摘要】本发明实施例公开了一种查询数据集的方法及装置。其中,该方法包括:获取用于查询数据集的SQL语句;对所述SQL语句进行预处理,生成预处理后SQL语句;对所述预处理后SQL语句进行合法性分析,当所述预处理后SQL语句为不合法语句时,抛出不合法信息;当所述预处理后SQL语句为合法语句时,将所述预处理后SQL语句拆分成至少一个SQL关键字段;在所述数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果;返回所述查询结果。本发明实施例提供的技术方案,用SQL语句实现对数据集的查询,提高了对多个数据集查询的通用性,以及简化了查询数据集的操作,可以方便的实现对缓存在本地的数据集进行查询过滤统计操作。
【专利说明】一种查询数据集的方法及装置

【技术领域】
[0001]本发明实施例涉及数据查询【技术领域】,尤其涉及一种查询数据集的方法及装置。

【背景技术】
[0002]随着信息化技术的发展及数据管理技术的发展,数据库系统越来越成为计算机应用中一个不可缺少的组成模块。数据库系统使得计算机应用从科学计算为主转化为以数据处理为主,并使得计算机得以在各行各业中普遍应用起来。
[0003]在使用数据库的提供数据查询服务过程中,为了提高数据库查询访问性能,降低数据库磁盘读写访问量,常用的一个办法就是首次查询时把查询结果从数据库缓存到本地的数据集中,其后对首次查询结果后续的查询过滤统计操作都针对缓存在本地的数据集进行,不再连接数据库进行操作。但对数据集的查询操作是通过针对数据集编写的特定代码来实现的。
[0004]上述现有技术存在的技术缺陷在于:对缓存在本地的数据集的查询采用特定的代码来实现,导致对本地缓存的数据集的查询过滤统计操作很不方便,并且,在需要对多个数据集进行查询时,编写查询数据集的特定代码工作量大,查询操作也比较复杂,不方便实现对缓存在本地的数据集进行查询过滤统计操作。


【发明内容】

[0005]本发明实施例提供一种查询数据集的方法及装置,以提高对缓存在本地的数据集查询的通用性和简捷性。
[0006]第一方面,本发明实施例提供了一种查询数据集的方法,该方法包括:
[0007]获取用于查询数据集的SQL语句;
[0008]对所述SQL语句进行预处理,生成预处理后SQL语句;
[0009]对所述预处理后SQL语句进行合法性分析,当所述预处理后SQL语句为不合法语句时,抛出不合法信息;
[0010]当所述预处理后SQL语句为合法语句时,将所述预处理后SQL语句拆分成至少一个SQL关键字段;
[0011]在所述数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果;
[0012]返回所述查询结果。
[0013]第二方面,本发明实施例还提供了一种查询数据集的装置,该装置包括:
[0014]获取单元,用于获取用于查询数据集的SQL语句;
[0015]预处理单元,用于对所述SQL语句进行预处理,生成预处理后SQL语句;
[0016]分析单元,用于对所述预处理后SQL语句进行合法性分析,并当所述预处理后SQL语句为不合法语句时,抛出不合法信息;
[0017]拆分单元,用于当所述预处理后SQL语句为合法语句时,将所述预处理后SQL语句拆分成至少一个SQL关键字段;
[0018]查询单元,用于在所述数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果;
[0019]返回单元,用于返回所述查询结果。
[0020]本发明实施例提供的技术方案,首先获取用于查询数据集的SQL语句,然后对所述SQL语句进行预处理和合法性分析,当SQL语句为合法语句时,将SQL语句按照关键字拆分成关键字段,在数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果,最后将查询结果存储到查询结果集中,用SQL语句实现对数据集的查询不需要编写针对数据集查询的特定代码,提高了对多个数据集查询的通用性,以及简化了查询数据集的操作,可以更方便的实现对缓存在本地的数据集进行查询过滤统计操作。

【专利附图】

【附图说明】
[0021]图1是本发明实施例一提供的一种查询数据集的方法的流程示意图;
[0022]图2是本发明实施例二提供的一种查询数据集的方法的流程示意图;
[0023]图3是本发明实施例二提供的一种查询数据集的方法所涉及的查询条件语法树的结构不意图;
[0024]图4是本发明实施例三提供的一种查询数据集的装置的结构示意图。

【具体实施方式】
[0025]下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
[0026]实施例一
[0027]图1是本发明实施例一提供的一种查询数据集的方法的流程示意图。该方法可以由查询数据集的装置来执行,所述装置由软件来实现。参见图1,本实施例提供的查询数据集的方法具体包括如下操作:
[0028]操作S110、获取用于查询数据集的SQL语句。
[0029]传统的对缓存在本地的数据集的查询操作通常是采用特定代码实现,不具有通用性,且对缓存在本地的数据集进行查询过滤统计操作复杂。为此,本实施例可使用SQL语句来查询缓存在本地的数据集,提高对本地缓存数据集查询过滤统计操作的通用性和简捷性。
[0030]在本实施例中,获取用于查询数据集的SQL语句,可具体为:
[0031]向用于管理数据库的功能模块或电子设备,发起首次查询请求;
[0032]获取用于管理数据库的功能模块或电子设备根据首次查询请求得到的SQL语句,以及相应的数据集,并将该数据集缓存在本地。
[0033]操作S120、对所述SQL语句进行预处理,生成预处理后SQL语句。
[0034]该操作中,对SQL语句进行预处理可以为以下操作:将SQL语句中的多行语句替换成单行,这主要是通过将回车符(\a)和换行符(\n)替换为空格实现的^fSQL语句中的跳格键(\t)替换成空格;将SQL语句中包含的连续空格替换成单个空格;将SQL语句中SQL保留字符串全部变成小写形式,SQL保留字符串有where、select、from、group by、orderby、asc、desc、like、min、max、avg、sum、count等。在对SQL语句进行预处理后,得到预处理后SQL语句。
[0035]操作S130、对所述预处理后SQL语句进行合法性分析,当所述预处理后SQL语句为不合法语句时,抛出不合法信息。
[0036]该操作中,对预处理后得到的预处理后SQL语句进行合法性分析可以为以下操作:
[0037]对SQL语句中SQL保留字符串的拼写正确性进行判断;
[0038]对SQL保留字符串的组合正确性进行判断;
[0039]对SQL语句中单引号成对与否进行判断;
[0040]对SQL语句中双引号成对与否进行判断;
[0041]对SQL语句中括号成对与否进行判断;
[0042]对SQL语句中字段命名正确性进行判断;优选的,字段名用f加一个数字组成,数字为该字段在数据集记录中的位置,第一个为1,其后为2、3、4,依次类推,若字段名符合此命名规则,则命名正确,否则命名错误;
[0043]对SQL语句中条件字段的value字符串长度的合法性进行判断;优选的,每个value字符串的最大长度为1024个字符,最小长度为I个字符,所以SQL语句中条件字段的value字符串长度在I?1024字符之间为合法关键字段,否则不合法。
[0044]在对SQL语句进行合法性分析的过程中,一旦发现SQL语句存在不合法问题,后续操作将不再进行,通过抛出合法性异常信息给出异常提示。
[0045]操作S140、当所述预处理后SQL语句为合法语句时,将所述预处理后SQL语句拆分成至少一个SQL关键字段。
[0046]本实施例将SQL语句进行拆分,将SQL语句拆分成至少一个关键字段。关键字段可以为select段、from段、where段、groupby段、having段、orderby段,拆分后能够方便地提取对本地上的哪个数据集进行处理、查询满足哪些条件、分组条件、筛选条件、排序条件以及返回包含哪些字段的结果集等。
[0047]操作S150、在所述数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果。
[0048]操作S160、返回所述查询结果。
[0049]需要说明的是,本实施例仅以对数据集的查询操作为例进行了说明,另外,对数据集的过滤统计等操作原理相同。
[0050]本实施例首先获取用于查询数据集的SQL语句,然后对所述SQL语句进行预处理得到预处理后SQL语句,对预处理后SQL语句进行合法性分析,当预处理后SQL语句为合法语句时,将预处理后SQL语句按照关键字拆分成关键字段,在数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果,最后将查询结果存储到查询结果集中,用SQL语句实现对数据集的查询不需要编写针对数据集查询的特定代码,提高了对多个数据集查询的通用性,简化了查询数据集的操作,可以更方便的实现对缓存在本地的数据集进行查询过滤统计操作。
[0051]实施例二
[0052]图2是本发明实施例二提供的一种查询数据集的方法的流程示意图。本实施例在上述实施例一的基础上,对其操作S140和操作S150进行优化。参见图2,本实施例提供的查询数据集的方法具体包括如下操作:
[0053]操作S210、获取用于查询数据集的SQL语句。
[0054]操作S220、对所述SQL语句进行预处理,生成预处理后SQL语句。
[0055]操作S230、对所述预处理后SQL语句进行合法性分析,当所述预处理后SQL语句为不合法语句时,抛出不合法信息。
[0056]操作S241、判断所述预处理后SQL语句是否是嵌套SQL语句。
[0057]在确定预处理后SQL语句为合法语句后对预处理后SQL语句进行拆分和查询操作,在拆分和查询操作之前,先判断预处理后SQL语句是否是嵌套SQL语句,如果预处理后SQL语句是嵌套SQL语句则依次执行操作S242、操作S251和操作S260 ;如果预处理后SQL语句不是嵌套SQL语句则依次执行操作S243、操作S252和操作S260。
[0058]操作S242、将所述预处理后SQL语句按照嵌套层次由里到外依次拆分成相应的SQL子语句,以及将所述SQL子语句按照关键字先后依次拆分成SQL关键字段。
[0059]当所述预处理后SQL语句是嵌套SQL语句时,对预处理后SQL语句的拆分操作包括两个步骤:第一步实现嵌套SQL语句嵌套关系的拆分,具有嵌套关系的SQL语句在后续查询时会从嵌套关系层最里层逐步执行到最外层,相应的对嵌套SQL语句按照嵌套层次由里到外依次拆分成相应的SQL子语句。第二步实现SQL子句到SQL段的拆分,即将SQL子语句按照关键字先后依次拆分成SQL关键字段,SQL关键字段可以为select段、from段、where段、groupby段、having段、orderby段等。拆分后能够方便地提取对本地上的哪个数据集进行处理、查询满足哪些条件、分组条件、筛选条件、排序条件以及返回包含哪些字段的结果集。
[0060]为了更清楚的说明嵌套SQL语句拆分的过程,先进行举例说明。例如,预处理后 SQL 语句为嵌套语句 A:“select f I, f3 from(select f I, f2, f3 from tl where f2 =beijing or f3 = beijing)where fI = 010 order by f3 desc,,。
[0061]第一步,实现嵌套SQL语句嵌套关系的拆分,预处理后SQL语句A被拆分成SQL子句 Al 和 SQL 子句 A2,其中 Al 为:“select fl, f3 from A2 where fl = OlOorder by f3desc” ;A2 为:“select fI, f2, f3 from tl where f2 = beijing or f3 = Beijing,,。
[0062]第二步,将SQL子句Al和SQL子句A2拆分成SQL关键字段,针对SQL子句A2将拆分成:关键字段select fl, f2, f3 ;关键字段from 11 ;关键字段where f2 = beijing orf3 = Beijing。针对SQL子句Al将拆分成:关键字段select fl, f3 ;关键字段from A2 ;关键字段 where fl = 010 ;关键字段 order by f3 desc。
[0063]操作S243、将所述预处理后SQL语句按照关键字先后依次拆分成SQL关键字段。
[0064]当所述预处理后SQL语句不是嵌套SQL语句时,直接将预处理后SQL语句按照关键字先后依次拆分成SQL关键字段。
[0065]操作S251、按照嵌套层次由里到外的顺序以及预先设定的各SQL关键字段的先后顺序,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,以获取查询结果。
[0066]这里,预先设定的各SQL关键字段的先后顺序为操作S242中SQL子句拆分成SQL关键字段的顺序。对预处理后SQL语句的查询操作,会根据SQL语句嵌套关系从最里层到最外层逐步执行SQL子句查询操作,每一个SQL子句的查询又包括对SQL子句中每一个SQL关键字段的查询,在执行查询时会先进行SQL子句A2的查询,执行完毕后再执行SQL子句Al的查询。
[0067]作为一种【具体实施方式】,预先设定的各SQL关键字段的先后顺序依次为:fr0m段,where段,group by段、having段、order by段和select段。则对SQL子句中SQL关键字段的查询可以分为以下几个步骤执行:第一步通过分析from段获得查询的数据集;第二步通过分析where段获得查询条件,对数据集进行筛选;第三步通过分析group by段获得数据分组情况,对第二步的结果数据进行分组操作;第四步通过分析聚集函数,对第三步的结果进行计算处理;第五步通过分析having段获得筛选分组情况,对第四步的结果进行筛选分组处理;第六步通过分析order by段对结果集进行排序,对结果集排序包括ASC (升序)和DESC (降序)两种;第七步通过分析select段对第六步的结果进行按规定字段输出。
[0068]操作S252、按照预先设定的各SQL关键字段的先后顺序,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,以获取查询结果。
[0069]当所述预处理后SQL语句不是嵌套SQL语句时,直接按照预先设定的各SQL关键字段的先后顺序,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,并获取查询结果。
[0070]操作S260、返回所述查询结果。
[0071]在本实施例的一种优选的实施方式中,在所述数据集中执行与SQL关键字段中条件字段对应的查询可以采用以下操作:
[0072]获取SQL关键字段中条件字段的查询条件,并根据所述查询条件生成查询条件语法树;
[0073]根据所述查询条件语法树,在所述数据集中执行与所述条件字段对应的查询操作。
[0074]在上述优选实施方式中,根据查询条件生成查询条件语法树具体为:将查询条件对应的查询表达式转换成查询条件语法树。例如,某条件字段的查询条件B为(f2 =beijing or f3< = 4) and (f 2 = shanghai or f3<6 or f4>2),则查询条件 B 被转换成如图3所示的条件语法树。在对执行与条件字段对应的查询操作时,从查询条件语法树的叶子开始逐步查找查询项,并调用对应的查询函数执行查询操作。本实施例的查询项是指一颗查询条件语法树中仅包含叶子的子树。一个查询项在执行完查询操作后,会把该查询项用其返回值替换为一个叶子。
[0075]如图3所示的查询条件语法树,首先执行f2 = Bei jing、f3〈 = 4、f2 = shangha1、f3〈6、f4>2的查询操作,然后用所得的查询结果替换查询条件语法树中的这5个查询项,其次会执行第二层的两个or查询项,然后用查询结果替换查询条件语法树中的这两个查询项,最后执行第一层的and查询项。其中函数可以为大于查询函数、小于查询函数、等于查询函数、小于等于查询函数、大于等于查询函数、like查询函数、between查询函数、and查询函数、or查询函数、not查询函数。
[0076]本实施例首先获取用于查询数据集的SQL语句;然后对所述SQL语句进行预处理得到预处理后SQL语句,对预处理后SQL语句进行合法性分析,当预处理后SQL语句为合法语句时,判断预处理后SQL语句是否为嵌套SQL语句,若预处理后SQL语句是嵌套SQL语句,先根据嵌套关系将预处理后SQL语句拆分成SQL子句,再将SQL子句拆分成SQL关键字段,否则直接将预处理后SQL语句拆分成SQL关键字段,使得拆分后的SQL语句能够方便的提取对哪个数据集进行操作,以及查询满足的条件和返回包含哪些字段的结果集,其次,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,以获取查询结果;最后,将查询结果存储到结果集中。用SQL语句实现对数据集的查询不需要编写针对数据集查询的特定代码,提高了对多个数据集查询的通用性,以及简化了查询数据集的操作,可以更方便的实现对缓存在本地的数据集进行查询过滤统计操作。
[0077]实施例三
[0078]图4是本发明实施例三提供的一种查询数据集的装置的结构示意图。参见图4,该装置的具体结构如下:
[0079]获取单元401,用于获取用于查询数据集的SQL语句;
[0080]预处理单元402,用于对所述SQL语句进行预处理,生成预处理后SQL语句;
[0081]分析单元403,用于对所述预处理后SQL语句进行合法性分析,并当所述预处理后SQL语句为不合法语句时,抛出不合法信息;
[0082]拆分单元404,用于当所述预处理后SQL语句为合法语句时,将所述预处理后SQL语句拆分成至少一个SQL关键字段;
[0083]查询单元405,用于在所述数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果;
[0084]返回单元406,用于返回所述查询结果。
[0085]进一步的,所述拆分单元404还包括:判断子单元4041,用于判断所述预处理后SQL语句是否是嵌套SQL语句;
[0086]第一拆分子单元4042,用于当所述预处理后SQL语句是嵌套SQL语句时,将所述预处理后SQL语句根据嵌套层次由里到外依次拆分成相应的SQL子语句,以及将所述SQL子语句按照关键字先后依次拆分成SQL关键字段;
[0087]第二拆分子单元4043,用于当所述预处理后SQL语句不是嵌套SQL语句时,将所述预处理后SQL语句按照关键字先后依次拆分成SQL关键字段。
[0088]进一步的,所述查询单元具体用于:
[0089]当所述预处理后SQL语句是嵌套SQL语句时,按照嵌套层次由里到外的顺序以及预先设定的各SQL关键字段的先后顺序,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,以获取查询结果;
[0090]当所述预处理后SQL语句不是嵌套SQL语句时,按照预先设定的各SQL关键字段的先后顺序,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,以获取查询结果。
[0091]进一步的,SQL关键字段包括条件字段;所述查询单元包括条件查询子单元,用于:获取SQL关键字段中条件字段的查询条件,并根据查询条件生成查询条件语法树;
[0092]根据所述查询条件语法树,在所述数据集中执行与所述条件字段对应的查询操作。
[0093]上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。
[0094]注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
【权利要求】
1.一种查询数据集的方法,其特征在于,包括: 获取用于查询数据集的SQL语句; 对所述SQL语句进行预处理,生成预处理后SQL语句; 对所述预处理后SQL语句进行合法性分析,当所述预处理后SQL语句为不合法语句时,抛出不合法信息; 当所述预处理后SQL语句为合法语句时,将所述预处理后SQL语句拆分成至少一个SQL关键字段; 在所述数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果; 返回所述查询结果。
2.根据权利要求1所述的查询数据集的方法,其特征在于,当所述预处理后SQL语句为合法语句时,将所述预处理后SQL语句拆分成至少一个SQL关键字段,包括: 判断所述预处理后SQL语句是否是嵌套SQL语句; 当所述预处理后SQL语句是嵌套SQL语句时,将所述预处理后SQL语句按照嵌套层次由里到外依次拆分成相应的SQL子语句,以及将所述SQL子语句按照关键字先后依次拆分成SQL关键字段; 当所述预处理后SQL语句不是嵌套SQL语句时,将所述预处理后SQL语句按照关键字先后依次拆分成SQL关键字段。
3.根据权利要求2所述的查询数据集的方法,其特征在于,在所述数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果,包括: 当所述预处理后SQL语句是嵌套SQL语句时,按照嵌套层次由里到外的顺序以及预先设定的各SQL关键字段的先后顺序,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,以获取查询结果; 当所述预处理后SQL语句不是嵌套SQL语句时,按照预先设定的各SQL关键字段的先后顺序,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,以获取查询结果。
4.根据权利要求3所述的查询数据集的方法,其特征在于,SQL关键字段包括条件字段; 在所述数据集中执行与所述条件字段对应的查询操作,包括: 获取SQL关键字段中条件字段的查询条件,并根据所述查询条件生成查询条件语法树; 根据所述查询条件语法树,在所述数据集中执行与所述条件字段对应的查询操作。
5.一种查询数据集的装置,其特征在于,包括: 获取单元,用于获取用于查询数据集的SQL语句; 预处理单元,用于对所述SQL语句进行预处理,生成预处理后SQL语句; 分析单元,用于对所述预处理后SQL语句进行合法性分析,并当所述预处理后SQL语句为不合法语句时,抛出不合法信息; 拆分单元,用于当所述预处理后SQL语句为合法语句时,将所述预处理后SQL语句拆分成至少一个SQL关键字段; 查询单元,用于在所述数据集中执行与所述SQL关键字段对应的查询操作,以获取查询结果; 返回单元,用于返回所述查询结果。
6.根据权利要求5所述的查询数据集的装置,其特征在于,所述拆分单元包括: 判断子单元,用于判断所述预处理后SQL语句是否是嵌套SQL语句; 第一拆分子单元,用于当所述预处理后SQL语句是嵌套SQL语句时,将所述预处理后SQL语句根据嵌套层次由里到外依次拆分成相应的SQL子语句,以及将所述SQL子语句按照关键字先后依次拆分成SQL关键字段; 第二拆分子单元,用于当所述预处理后SQL语句不是嵌套SQL语句时,将所述预处理后SQL语句按照关键字先后依次拆分成SQL关键字段。
7.根据权利要求6所述的查询数据集的装置,其特征在于,所述查询单元具体用于: 当所述预处理后SQL语句是嵌套SQL语句时,按照嵌套层次由里到外的顺序以及预先设定的各SQL关键字段的先后顺序,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,以获取查询结果; 当所述预处理后SQL语句不是嵌套SQL语句时,按照预先设定的各SQL关键字段的先后顺序,在所述数据集中依次执行与所述预处理后SQL语句中的各SQL关键字段对应的查询操作,以获取查询结果。
8.根据权利要求7所述的查询数据集的装置,其特征在于,SQL关键字段包括条件字段; 所述查询单元包括条件查询子单元,用于:获取SQL关键字段中条件字段的查询条件,并根据查询条件生成查询条件语法树; 根据所述查询条件语法树,在所述数据集中执行与所述条件字段对应的查询操作。
【文档编号】G06F17/30GK104391923SQ201410667802
【公开日】2015年3月4日 申请日期:2014年11月20日 优先权日:2014年11月20日
【发明者】贾高峰, 田晋坤, 曹良景 申请人:北京锐安科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1