技术领域
[0001] 本申请涉及数据处理领域,具体而言,涉及一种基于查询框架的数据查询方法及装置。
相关背景技术
[0002] 目前,针对于具体的查询请求,是由查询请求方进行设计,然后根据设计的结构,将数据返回,因此基本上每一个查询接口都有一套自己的查询结构,并且每个接口只能使用自己的一套结构进行查询,第三方在使用的时候,必须要了解该逻辑,然后设计出针对该接口的查询。然而,通过这样的操作提升了使用该接口的成本,同时也限制了接口标准化的进行。相关技术中,将所有接口使用的查询逻辑都统一,不论是对接口的推广、第三方使用人员以及标准化都会有很大的好处,适用于基本所有查询请求以及查询结果的结构;该结构定义了调用方传递的参数的形式,以及被调用方返回的结果形式。这样接口实现方根据这套标准的结构,转换为自身的查询请求,同时将结构转换成为标准结构的结果返回;接口调用方按照标准的请求进行参数的传递,而后得到标准结构的查询结果。但是该框架目前更偏向于一种协议,实现方如果使用该框架,需要实现自己的相应查询代码。因此,导致基于通用查询框架的查询效率低。
[0003] 针对相关技术中基于通用查询框架的查询效率低的问题,目前尚未提出有效的解决方案。
具体实施方式
[0019] 需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
[0020] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
[0021] 需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0022] 为了便于描述,以下对本申请实施例涉及的术语进行说明:
[0023] 结构化查询语言(Structured Query Language,简称SQL)是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统,可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
[0024] 根据本申请的实施例,提供了一种基于查询框架的数据查询方法。
[0025] 图1是根据本申请实施例的基于查询框架的数据查询方法的流程图。如图1所示,该方法包括以下步骤:
[0026] 步骤S101,接收查询请求。
[0027] 优选地,在本申请实施例提供的基于查询框架的数据查询方法中,在接收查询请求之前,该方法还包括:获取查询系统中的列信息;基于列信息构造查询参数;以及根据查询参数生成查询请求。
[0028] 例如:一个订单管理系统中有会员表、订单表、订单详细信息表三张表;会员表中包含会员ID、会员名称等内容;订单表中包含有订单号、会员ID、订单日期、订单金额、是否己完成等信息;订单详细表中包含订单号、产品名称、金额等信息。所有的金额以分的形式进行存储。
[0029] 订单查询系统向外暴露如下的业务字段:
[0030] 1,会员名称
[0031] 允许查询、允许显示、允许分组
[0032] 2,订单号
[0033] 允许查询、允许显示、允许过滤
[0034] 3,订单金额(元)
[0035] 允许查询、允许显示
[0036] 4,订单日期
[0037] 允许查询、允许显示、允许过滤
[0038] 5,订单起始时间
[0039] 允许过滤
[0040] 6,订单结束时间
[0041] 允许过滤
[0042] 7,产品名称
[0043] 允许查询、允许显示、允许分组
[0044] 如果用户希望得到在某段时间内,会员的订单金额情况,并按金额由高到低排序那么会获取查询系统中的列信息构造查询参数;以及根据查询参数生成查询请求,如下:
[0045] 1,查询列
[0046] 会员名称、订单金额(元)
[0047] 2,过滤条件
[0048] 订单起始时间:2015/01/01
[0049] 订单结束时间:2015/01/31
[0050] 3,分组信息
[0051] 会员名称
[0052] 4,排序信息
[0053] 订单金额
[0054] 步骤S102,获取查询框架,其中,查询框架为查询系统中具有预设数据结构的数据查询框架。
[0055] 在查询系统接收到查询请求之后,在查询系统中获取查询框架,需要说明的是,本申请中提及的查询框架为为查询系统中具有预设数据结构的数据查询框架,该结构定义了调用方传递的参数的形式,以及被调用方返回的结果形式;这样接口实现方根据这套标准的查询系统的结构,转换为自身的查询请求,同时将结构转换成为标准结构的结果返回;接口调用方按照标准的请求进行参数的传递,最后得到标准结构的结果。
[0056] 步骤S103,根据查询框架和查询请求生成相应的结构化查询语言。
[0057] 可选地,在本申请实施例提供的基于查询框架的数据查询方法中,根据查询框架和查询请求生成相应的结构化查询语言包括:根据查询请求确定查询框架中的目标查询列;在数据库中确定与目标查询列对应的数据列;根据数据列确定数据来源表,其中,数据来源表为数据库中存储有数据列中数据的表;以及根据查询请求、目标查询列和数据来源表生成相应的结构化查询语言。
[0058] 可选地,在本申请实施例提供的基于查询框架的数据查询方法中,查询请求包括多个查询字段,多个查询字段包括过滤条件查询字段,根据查询请求、目标查询列和数据来源表生成相应的结构化查询语言包括:获取查询请求中过滤条件查询字段;以及根据过滤条件查询字段、目标查询列和数据来源表生成过滤条件对应的结构化查询语言。
[0059] 可选地,在本申请实施例提供的基于查询框架的数据查询方法中,查询请求包括多个查询字段,多个查询字段包括排序信息查询字段,根据查询请求、目标查询列和数据来源表生成相应的结构化查询语言包括:获取查询请求中排序信息查询字段;以及根据排序信息查询字段、目标查询列和数据来源表生成排序信息对应的结构化查询语言。
[0060] 具体地,当查询系统接收到查询请求之后,创建查询框架中的目标查询列到数据库中的具体列的映射关系,根据该映射关系在数据库中确定与目标查询列对应的数据列;创建数据库中数据列与数据表(数据来源表)之间的映射关系,即可以从数据表中获取到数据列中的数据,需要说明的是,这里的数据表可以是一个表也可以多个表,因为数据库中的数据列中的数据可能分布在多个数据表中。根据查询请求、目标查询列和数据来源表生成相应的结构化查询语言。例如,查询请求中包括过滤条件查询字段,生成过滤条件的SQL语句;查询请求中包括分组信息查询字段,生成分组的SQL语句;查询请求中包括排序信息查询字段,生成排序的SQL语句,需要说明的是,查询请求中可能包含各种查询字段,在本申请中,根据查询请求中相应的查询字段生成相应的SQL语句。通过以上操作,即完成通用查询框架到SQL语句的转换。
[0061] 例如,第三方系统会给该查询系统一个业务字段到具体字段的映射表:比如:
[0062] 订单金额(元):订单金额/100
[0063] 同时第三方系统会根据该查询给出数据来源:
[0064] Order INNER JOIN User ON Order.UserIde=User.Id
[0065] 那么通用查询框架到SQL语句的转换为:
[0066] 查询列:会员名称、订单金额
[0067] 数据来源:Order INNER JOIN User ON Order.UserIde=User.Id[0068] 过滤条件:OrderDate BETWEEN订单起始时间AND订单结束时间
[0069] 分组信息:会员名称
[0070] 排序信息:订单金额
[0071] 基于以上信息生成SQL语句。
[0072] 步骤S104,根据结构化查询语言执行数据查询。
[0073] 基于上述生成的SQL语句执行数据查询,得到通用查询框架协议指定格式的结果,并返回给查询请求方。
[0074] 综上所述,在本申请中,数据实现方根据查询框架的约束(在本申请中查询框架可以理解为一个预设协议),给用户提供该系统的元数据(元数据是该系统能够提供的数据,主要是指列的信息,例如,列是否可以被过滤、是否可以被查询、是否可以被分组、是否可以被排序以及列的类型等等信息),外部系统根据该列信息组装一个查询请求,例如,该查询请求可以包括查询的列有哪些;过滤的列有哪些,以及过滤的规则(按哪个列、和哪个值比较、比较运算符,同时满足哪些需求;分组的列有哪些;排序的列有哪些;数据的范围等等。系统根据外部请求,通过内部的SQL转化模块,将外部请求转化为内部的SQL语句,执行SQL请求,将SQL请求转化为通用查询框架协议指定格式的结果,同时返回给查询请求方。从而实现了从通用查询框架到具体结构化查询语言的转化,进而达到了提升基于通用查询框架的查询效率的效果。
[0075] 本申请实施例提供的基于查询框架的数据查询方法,通过接收查询请求;获取查询框架,其中,查询框架为查询系统中具有预设数据结构的数据查询框架;根据查询框架和查询请求生成相应的结构化查询语言;以及根据结构化查询语言执行数据查询,解决了相关技术中基于通用查询框架的查询效率低的问题。实现了从通用查询框架到具体结构化查询语言的转化,进而达到了提升基于通用查询框架的查询效率的效果。
[0076] 需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
[0077] 本申请实施例还提供了一种基于查询框架的数据查询装置,需要说明的是,本申请实施例的基于查询框架的数据查询装置可以用于执行本申请实施例所提供的用于基于查询框架的数据查询方法。以下对本申请实施例提供的基于查询框架的数据查询装置进行介绍。
[0078] 图2是根据本申请实施例的基于查询框架的数据查询装置的示意图。如图2所示,该装置包括:接收单元10、第一获取单元20、第一生成单元30和查询单元40。
[0079] 接收单元10,用于接收查询请求。
[0080] 第一获取单元20,用于获取查询框架,其中,查询框架为查询系统中具有预设数据结构的数据查询框架。
[0081] 第一生成单元30,用于根据查询框架和查询请求生成相应的结构化查询语言。
[0082] 查询单元40,用于根据结构化查询语言执行数据查询。
[0083] 本申请实施例提供的基于查询框架的数据查询装置,通过接收单元10接收查询请求;第一获取单元20获取查询框架,其中,查询框架为查询系统中具有预设数据结构的数据查询框架;第一生成单元30根据查询框架和查询请求生成相应的结构化查询语言;以及查询单元40根据结构化查询语言执行数据查询,实现了从通用查询框架到具体结构化查询语言的转化,进而达到了提升基于通用查询框架的查询效率的效果。
[0084] 可选地,在本申请实施例提供的基于查询框架的数据查询装置中,第一生成单元30包括:第一确定模块,用于根据查询请求确定查询框架中的目标查询列;第二确定模块,用于在数据库中确定与目标查询列对应的数据列;第三确定模块,用于根据数据列确定数据来源表,其中,数据来源表为数据库中存储有数据列中数据的表;以及生成模块,用于根据查询请求、目标查询列和数据来源表生成相应的结构化查询语言。
[0085] 可选地,在本申请实施例提供的基于查询框架的数据查询装置中,查询请求包括多个查询字段,多个查询字段包括过滤条件查询字段,生成模块包括:第一获取子模块,用于获取查询请求中过滤条件查询字段;以及第一生成子模块,用于根据过滤条件查询字段、目标查询列和数据来源表生成过滤条件对应的结构化查询语言。
[0086] 可选地,在本申请实施例提供的基于查询框架的数据查询装置中,查询请求包括多个查询字段,多个查询字段包括排序信息查询字段,生成模块包括:第二获取子模块,用于获取查询请求中排序信息查询字段;以及第二生成子模块,用于根据排序信息查询字段、目标查询列和数据来源表生成排序信息对应的结构化查询语言。
[0087] 可选地,在本申请实施例提供的基于查询框架的数据查询装置中,该装置还包括:第二获取单元,用于获取查询系统中的列信息;构造单元,用于基于列信息构造查询参数;
以及第二生成单元,用于根据查询参数生成查询请求。
[0088] 所述基于查询框架的数据查询装置包括处理器和存储器,上述接收单元、第一获取单元、第一生成单元和查询单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元实现相应功能。
[0089] 处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可以设置一个或以上,通过调整内核参数进行基于查询框架的数据查询。
[0090] 存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
[0091] 本申请还提供了一种计算机程序产品的实施例,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:接收查询请求;获取查询框架,其中,查询框架为查询系统中具有预设数据结构的数据查询框架;根据查询框架和查询请求生成相应的结构化查询语言;以及根据结构化查询语言执行数据查询。
[0092] 需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
[0093] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0094] 在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
[0095] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0096] 另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0097] 显然,本领域的技术人员应该明白,上述的本申请的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本申请不限制于任何特定的硬件和软件结合。
[0098] 以上所述仅为本申请的优选实施例,并不用于限制本申请,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。