基于SQL查询语句实现实时查询服务的方法和系统
文献发布时间:2023-06-19 11:19:16
技术领域
本发明涉及一种基于SQL查询语句实现实时查询服务的方法和系统。
背景技术
SQL查询语句是最广泛使用的描述对数据进行查询、处理以获得统计结果/计算结果的方式。传统的SQL查询语句的执行逻辑可归纳为:
1、解析SQL查询语句字符串,生成执行计划;
2、校验执行计划,验证查询所关联的数据表均存在数据库中;以及
3、运行执行计划,计算并返回结果。
然而,上述执行模式并不适用于在AI和特征计算领域的常见需求:即在线上服务中实时计算查询结果。现有技术中存在的技术问题在于:
首先,传统的SQL查询执行模式是批量对数据进行处理的,一次执行会对执行计划相关的数据表中存在的全量数据进行计算;而实时线上服务仅需获取与所关注的数据行相关的信息,例如,仅需对数据表中的单行数据进行计算。
其次,由于传统的SQL查询执行模式是针对全量数据进行的,这导致传统的SQL查询执行模式的计算速度过慢,无法满足实时线上服务的性能要求,实时线上服务难以使用传统的SQL查询执行引擎实现实时的数据查询计算。
发明内容
本发明的目的在于提供一种基于SQL查询语句实现实时查询服务的方法和系统。更具体地,提供一种能够以更快的响应速度满足实时线上服务的性能要求的SQL查询语句的执行模式。
根据本发明的一个或多个方面,本发明提供了一种基于SQL查询语句实现实时查询服务的方法,其特征在于,该方法包括:接收客户端发送的请求三元组;解析所述SQL查询语句并基于所述查询数据行和被查询数据表,生成只针对所述查询数据行执行所述SQL查询语句的执行计划;运行所述执行计划得到查询结果,并向所述客户端返回所述查询结果。其中,所述请求三元组包括:SQL查询语句、查询数据行和被查询数据表的标识。
在根据发明构思的示例性实施例中,所述执行计划可以包括拼表操作,所述拼表操作的左表是所述被查询数据表,仅对所述查询数据行执行拼表操作。
在根据发明构思的示例性实施例中,所述执行计划还可以包括投影操作,所述投影操作的输入是所述被查询数据表,仅对所述查询数据行执行投影操作。
在根据发明构思的示例性实施例中,所述执行计划还可以包括窗口操作,所述窗口操作的输入是所述被查询数据表,仅对所述查询数据行执行窗口操作。
在根据发明构思的示例性实施例中,在所述被查询数据表至少包括数据库中的预定的请求数据表。
在根据发明构思的示例性实施例中,所述方法还可以包括:在所述生成执行计划的步骤之后校验所述执行计划以验证查询所关联的数据表均存在数据库中。
根据本发明的一个或多个方面,本发明提供了一种基于SQL查询语句实现实时查询服务的系统,其特征在于,该系统包括:接收单元,接收客户端发送的请求三元组;执行计划生成单元,解析所述SQL查询语句并基于所述查询数据行和被查询数据表,生成只针对所述查询数据行执行所述SQL查询语句的执行计划;以及执行单元,运行所述执行计划得到查询结果,并向所述客户端返回所述查询结果,其中,所述请求三元组包括:SQL查询语句、查询数据行和被查询数据表的标识。
在根据发明构思的示例性实施例中,所述系统还包括:校验单元,校验所述执行计划以验证查询所关联的数据表均存在数据库中。
本发明的另一方面提供了一种存储指令的计算机可读存储介质,其中,当所述指令被至少一个计算装置运行时,促使所述至少一个计算装置执行如上所述的基于SQL查询语句实现实时查询服务的方法。
本发明的另一方面提供了一种包括至少一个计算装置和至少一个存储指令的存储装置的系统,其中,所述指令在被所述至少一个计算装置运行时,促使所述至少一个计算装置执行如上所述的基于SQL查询语句实现实时查询服务的方法。
根据本发明的一个或多个方面,基于SQL查询语句实现实时查询服务的方法和系统,基于查询数据行和被查询数据表生成只针对所述查询数据行执行所述SQL查询语句的执行计划。在该执行模式下,因执行计划仅针对查询数据行进行计算/统计,而非针对全量数据,从而能够以更快的响应速度提供查询结果。另一方面,因提供了仅与所关注的查询数据行相关的信息,所述方法和系统提供的查询结果能够满足实时线上服务的性能要求。
附图说明
从下面结合附图对本公开实施例的详细描述中,本公开的这些和/或其他方面和优点将变得更加清楚并更容易理解,其中:
图1是示出根据本公开的示例性实施例的基于SQL查询语句实现实时查询服务的方法的流程图;
图2是根据传统的SQL查询语句生成的执行计划的示例的示意图;
图3是根据本公开的示例性实施例的拼表操作的示例的示意图;
图4是根据本公开的示例性实施例的投影操作的示例的示意图;
图5是根据本公开的示例性实施例的窗口操作的示例的示意图;
图6是示出根据本公开的示例性实施例的基于SQL查询语句实现实时查询服务的系统的框图;以及
图7是示出应用根据本公开的示例性实施例的利用图6中的系统进行基于SQL查询语句实现实时查询服务的环境的示意图。
具体实施方式
下面参照附图详细描述本发明的实施例。所述实施例的示例在附图中示出,其中,相同的标号始终指的是相同的部件。以下将通过参照附图来说明所述实施例,以便解释本发明。
图1是示出根据本公开的示例性实施例的基于SQL查询语句实现实时查询服务的方法的流程图。
参照图1,在步骤S10中,接收客户端发送的请求三元组。其中,所述请求三元组包括:SQL查询语句、查询数据行和被查询数据表的标识。
在示例实施例中,查询数据行可以是被查询数据表中的最新数据行。例如,被查询数据表可以是交易记录表,查询数据行可以是交易记录表中最新生成的行。关于三元组将随后参照图3至图5进行具体描述。
在步骤S20中,解析所述SQL查询语句并基于所述查询数据行和被查询数据表,生成只针对所述查询数据行执行所述SQL查询语句的执行计划。所述执行计划包括拼表操作、投影操作和窗口操作。根据本发明的示例实施例,只针对查询数据行执行SQL查询语句的执行计划可以被称为请求模式下的执行计划。具体地,在下文中的描述中,除非特别地指出,拼表操作表示请求模式下的拼表操作,投影操作表示请求模式下的投影操作,窗口操作表示请求模式下的窗口操作。
在步骤S30中,运行所述执行计划得到查询结果,并向所述客户端返回所述查询结果。
为便于描述,下面将假设存在以下场景:
客户端向服务端发送查询请求,查询与查询数据行相关的三天内相同城市下的不同用户数目(例如,distinct_count,唯一计数)。服务端针对数据行执行SQL查询语句,并返回计算结果R。伪代码可以具有如下形式:
其中,trade_table为交易记录表,user_table为用户信息表,user_id为用户识别码,user_name为用户名,city为用户所在城市,time为交易发生时间。
需要说明的是,这里的示例仅为说明方便,而非对本发明的限制。
图2是根据传统的SQL查询语句生成的执行计划的示例的示意图。
参照图2,在传统的SQL查询语句中,生成的执行计划可以包括顺序执行的传统的窗口操作、传统的拼表操作和传统的投影操作。
具体地,在窗口操作中,将流水号为90010的数据行插入到交易记录表TT中,针对每条交易记录统计与其相关的三天内的交易记录,并返回针对流水号90010的三天内的交易记录。并将该结果传递到随后将要执行的传统的拼表操作中。
在拼表操作中,交易记录表为左表(对应语句Left join),根据交易记录表和用户信息表中的user_id,对两个表执行拼表操作。得到同时具有user_id、交易时间、用户名、城市的结果,并将其传递到随后将要执行的传统的投影操作中。
在投影操作中,对每条交易记录,均执行投影操作。例如,对流水号90010执行同在北京的用户名进行唯一计数的投影操作计算,得到相同城市的不同用户数为3的结果(即,用户C、A、F),并将该结果返回给客户端。
需要指出的是,上述针对传统的SQL查询语句所生成的执行计划的执行顺序仅是为了定义预期计算结果,执行计算的过程可以根据实际情况任意地改变。
为了示出方便,图2中仅示出了与流水号90010对应的拼表操作和投影操作。本领域技术人员将理解的是,传统的SQL查询语句的执行结果中对交易记录表中的每一行都存在一项代表当前交易行“三天内的相同城市下的不同用户数目”的数据(即,数据列)。然而,客户端并不关注交易记录表中全表各行的“三天内的相同城市下的不同用户数目”的数据。在这种使用场景下,因客户端仅需与查询数据行(例如,作为最新数据行的流水号为90010的数据行)相关的结果,所以服务端只需返回流水号为90010的数据行的“三天内的相同城市下的不同用户数目”的数据。在这种情况下,针对交易记录表中全表各行的计算将导致计算资源的浪费,并因此导致无法满足高性能在线服务的需求。
在实际的执行过程中,因为使用传统执行每次执行都计算了请求数据表中的全部数据,因此整体的性能开销过大。为此,需要对执行计划进行适配以期满足高性能在线服务的需求。
根据本发明的示例性实施例,在SQL查询语句相关的数据表中,存在且仅存在一张数据表被作为“请求数据表”,其他数据表均为非请求数据表。作为示例,请求数据表可以是客户端高频请求的数据表。请求数据表可以是由外部定义的数据库中的一张数据表。例如,请求数据表可以是在数据库形成时定义的数据表。在其它实施例中,可以在SQL查询语句之前,将数据库中的一张数据表选作请求数据表。
继续参照上述“查询与查询数据行相关的三天内相同城市下的不同用户数目”的示例。
首先按照图1所示执行步骤S10,接收客户端发送的请求三元组。其中,所述请求三元组包括:SQL查询语句、查询数据行和交易记录表TT的标识。
在步骤S20中,解析所述SQL查询语句并基于所述查询数据行和被查询数据表,生成只针对所述查询数据行执行所述SQL查询语句的执行计划。
根据本发明的示例性实施例,在只针对所述查询数据行生成执行计划的请求模式下,预期结果与传统执行模式计算结果相同,并对包括拼表操作、投影操作和窗口操作的执行计划进行如下参照图3至图5描述的适配。
图3是根据本公开的示例性实施例的拼表操作的示例的示意图。
所述拼表操作的左表是被查询数据表,仅对所述查询数据行执行拼表操作。在实施例中,被查询数据表至少包括请求数据表和非请求数据表。如果拼表操作的左表是请求数据表,则仅对所述查询数据行执行拼表操作,而不对数据库内的请求数据表本身进行操作计算。
具体地讲,参照图3所示,流水号为90010的数据行为查询数据行,交易记录表TT为请求数据表,用户信息表UT为非请求数据表。在拼表操作中,仅对包括流水号为90010的查询数据行执行拼表操作,从而生成包括流水号、user_id、交易时间、用户名和城市的单行数据。
图4是根据本公开的示例性实施例的投影操作的示例的示意图。
所述投影操作的输入是所述被查询数据表,仅对所述查询数据行执行投影操作。在实施例中,被查询数据表至少包括请求数据表。如果投影操作的输入表是请求数据表,则只对请求的行单行进行投影操作,不对数据库内的请求数据表本身进行操作计算。
具体地讲,参照图4所示,流水号为90010的数据行为查询数据行,包括流水号、user_id、交易时间、用户名和城市的表为请求数据表。仅针对流水号为90010的数据行执行投影操作(即,相同城市不同用户数,唯一计数计算),得到相同城市的不同用户数为3的结果(即,用户C、A、F)。
图5是根据本公开的示例性实施例的窗口操作的示例的示意图。
所述窗口操作的输入是所述被查询数据表,仅对所述查询数据行执行窗口操作。在实施例中,被查询数据表至少包括请求数据表。如果被查询数据表是请求数据表,则只对请求的行单行进行窗口操作,数据库内的请求数据表数据会使用窗口条件对该行的窗口数据进行筛选,且不会进行其它操作计算。
具体地讲,参照图5所示,流水号为90010的数据行为查询数据行,交易记录表为请求数据表。仅针对流水号为90010的数据行执行窗口操作(即,三天内的交易),得到仅针对查询数据行的三天内交易的结果。
根据上述示例,完成对执行计划的适配后,参照图1中示出的步骤S30,运行所述执行计划得到查询结果,并向所述客户端返回所述查询结果。需要指出的是,上述针对请求模式下的SQL查询语句所生成的执行计划的执行顺序仅是为了定义预期计算结果,执行计算的过程可以根据实际情况与传统的SQL查询语句生成的执行计划的执行顺序相同或不同。
此外,图3至图5中示出的请求数据表并未包括流水号为90010的查询数据行,返回的查询结果中也未计入流水号为90010的查询数据行。上述示例仅是示例。根据实际需求,作为最新数据行的查询数据行可以在查询前或查询后插入到被查询数据表中(例如,请求数据表)。此外,查询结果中可以计入流水号为90010的查询数据行以与传统模式下的SQL查询语句获得相同的查询结果;或者,也可以根据需要不计入流水号为90010的查询数据行。
需要说明的是,这里的示例仅为说明方便,而非对本发明的限制。例如,交易记录表中还可以包括常规的银行流水内容,例如,交易时间、交易地点、货币种类、金额、转出账号、转入账号等。用户信息表还可以包括年龄、职业、近三个月交易总额、一周内交易平均值等信息。上述用户信息表中的特征可以作为用于银行异常交易检测的特征,并用于反洗钱、反欺诈的预测或判断。在这样的使用场景下,与用户相关的信息表中的特征的查询需要满足实时线上服务的性能要求,如,反应速度快,查询频次高等。针对每一条新产生的交易记录,均可以执行用于银行异常交易检测的方法,该方法要求获得用户信息表中例如年龄、职业、近三个月交易总额、一周内交易平均值等信息,并以上述用户信息构建用户画像,从而通过预先训练好的机器学习模型实现异常交易的判断。
在使用经适配的请求模式的情况下,因为仅对查询数据行执行所述SQL查询语句的执行计划,而非针对全表数据,所以可能具有更快的计算速度和更短的响应时间。因此,上述用户信息表中的特征能够以较快的速度反馈给客户端,从而实现实时查询服务。
图6是示出根据本公开的示例性实施例的基于SQL查询语句实现实时查询服务的系统10的框图。
根据本发明的一个或多个方面,本发明提供了一种基于SQL查询语句实现实时查询服务的系统10,所述系统10包括:接收单元110、执行计划生成单元120和执行单元130。
接收单元110用于接收客户端发送的请求三元组。其中,所述请求三元组包括:SQL查询语句、查询数据行和被查询数据表的标识。接收单元110可以被配置为用来执行参照图1中的步骤S10描述的方法,因此在此省略冗余的描述。
执行计划生成单元120解析所述SQL查询语句并基于所述查询数据行和被查询数据表,生成只针对所述查询数据行执行所述SQL查询语句的执行计划。执行计划生成单元120可以被配置为用来执行参照图1中的步骤S20描述的方法,因此在此省略冗余的描述。
执行单元130运行所述执行计划得到查询结果,并向所述客户端返回所述查询结果。执行单元130可以被配置为用来执行参照图1中的步骤S30描述的方法,因此在此省略冗余的描述。
图7是示出应用根据本公开的示例性实施例的利用图6中的系统进行基于SQL查询语句实现实时查询服务的环境的示意图。
图7所示的环境可以包括基于SQL查询语句实现实时查询服务的系统10、网络20以及用户终端30和40。这里,应注意,用户终端30和用户终端40分别可指代多个终端。
其中,系统10可以是上面参照图4描述的系统10,该系统10可以部署在实体的IT设施上,也可部署在专门提供基于SQL查询语句实现实时查询服务的实体的IT设施上。网络20可以包括路由、交换机、服务器、云服务器等。用户终端30和40可以包括可以访问网络20的任何类型的电子产品,诸如蜂窝电话、智能电话、平板计算机、可穿戴装置、个人数字助理(PDA)、便携式多媒体播放器(PMP)、数字相机、音乐播放器、便携式游戏控制台、导航系统、数字电视、3D电视、个人计算机(PC)、家用电器、膝上型计算机等。用户终端30和40还可以是台式计算机、工作站计算机或服务器。用户终端30和40通过以太网协议、基于互联网协议(IP)的协议、基于传输控制协议(TCP)的协议、基于用户数据报协议(UDP)的协议、基于远程直接内存访问(RDMA)协议的协议以及基于NVMe-oF协议的协议或它们的组合来访问网络20和/或网络20中的服务器。
进一步地讲,用户终端30可以是客户端,并将数据上传至网络20和/或网络20中的服务器以形成数据库中的表。用户终端40可以向网络20和/或网络20中的服务器发出SQL查询请求,随后网络20和/或网络20中的服务器向系统10转发SQL查询请求,以及/或者用户终端40可以直接向系统10发出SQL查询请求。
在系统10收到SQL查询请求后,可以基于存储于自身内部、网络20和/或网络20中的服务器的数据库中的表和与用户终端40发出SQL查询请求,并按照参照图1、图3至图5描述的方法给出查询结果。系统10可直接或经由第三方,通过网络20向用户终端40展示查询结果。基于SQL查询语句实现实时查询服务的方法可以与上面参照图1、图3至图5描述的方法相同,在此不再赘述。
根据本发明示例性实施例的基于SQL查询语句实现实时查询服务的系统10所包括的各单元可被分别配置为执行特定功能的软件、硬件、固件或上述项的任意组合。例如,这些装置可对应于专用的集成电路,也可对应于纯粹的软件代码,还可对应于软件与硬件相结合的模块。此外,这些装置所实现的一个或多个功能也可由物理实体设备(例如,处理器、客户端或服务器等)中的组件来统一执行。
在本发明示例性实施例中还提出一种基于SQL查询语句实现实时查询服务的计算装置。所述计算装置可以部署在服务器或客户端中,也可以部署在分布式网络环境中的节点装置上。此外,所述计算装置可以是PC计算机、平板装置、个人数字助理、智能手机、web应用或其他能够执行上述指令集合的装置。
这里,所述计算装置并非必须是单个的计算装置,还可以是任何能够单独或联合执行上述指令(或指令集)的装置或电路的集合体。计算装置还可以是集成控制系统或系统管理器的一部分,或者可被配置为与本地或远程(例如,经由无线传输)以接口互联的便携式电子装置。
在所述计算装置中,处理器可包括中央处理器(CPU)、图形处理器(GPU)、可编程逻辑装置、专用处理器系统、微控制器或微处理器。作为示例而非限制,处理器还可包括模拟处理器、数字处理器、微处理器、多核处理器、处理器阵列、网络处理器等。
根据本发明示例性实施例的基于SQL查询语句实现实时查询服务的方法中所描述的某些操作可通过软件方式来实现,某些操作可通过硬件方式来实现,此外,还可通过软硬件结合的方式来实现这些操作。
处理器可运行存储在存储部件之一中的指令或代码,其中,所述存储部件还可以存储数据。指令和数据还可经由网络接口装置而通过网络被发送和接收,其中,所述网络接口装置可采用任何已知的传输协议。
存储部件可与处理器集成为一体,例如,将RAM或闪存布置在集成电路微处理器等之内。此外,存储部件可包括独立的装置,诸如,外部盘驱动、存储阵列或任何数据库系统可使用的其他存储装置。存储部件和处理器可在操作上进行耦合,或者可例如通过I/O端口、网络连接等互相通信,使得处理器能够读取存储在存储部件中的文件。
此外,所述计算装置还可包括视频显示器(诸如,液晶显示器)和用户交互接口(诸如,键盘、鼠标、触摸输入装置等)。计算装置的所有组件可经由总线和/或网络而彼此连接。
根据本发明示例性实施例的基于SQL查询语句实现实时查询服务的方法所涉及的操作可被描述为各种互联或耦合的功能块或功能示图。然而,这些功能块或功能示图可被均等地集成为单个的逻辑装置或按照非确切的边界进行操作。
例如,如上所述,提供一种包括至少一个计算装置和至少一个存储指令的存储装置的系统,其中,所述指令在被所述至少一个计算装置运行时,促使所述至少一个计算装置执行如参照图1、图3至图5描述的步骤。
也就是说,可由上述的计算装置来执行图1、图3至图5所示的基于SQL查询语句实现实时查询服务的方法。由于上述在图1、图3至图5中已经对基于SQL查询语句实现实时查询服务的方法进行了详细介绍,本发明对此部分的内容不再赘述。
可选地,上述基于SQL查询语句实现实时查询服务的系统和计算装置可被集成在平台方(例如,银行)的服务器中。除此之外,也可以可被集成在第三方服务器中以向用户提供实时查询结果,再由平台方来向用户进行展示(例如,由第三方服务器提供的API接口)。
应理解,根据本发明示例性实施例的基于SQL查询语句实现实时查询服务的方法可通过记录在计算可读介质上的程序来实现,例如,根据本发明的示例性实施例,可提供一种存储指令的计算机可读介质,其中,当所述指令被至少一个计算装置运行时,促使所述至少一个计算装置执行如参照图1、图3至图5描述的步骤。
上述计算机可读介质中的计算机程序可在诸如客户端、主机、代理装置、服务器等计算机设备中部署的环境中运行,应注意,所述计算机程序还可用于执行除了上述步骤以外的附加步骤或者在执行上述步骤时执行更为具体的处理,这些附加步骤和进一步处理的内容已经参照图1、图3至图5进行了描述,这里为了避免重复将不再进行赘述。
应注意,根据本发明示例性实施例的基于SQL查询语句实现实时查询服务的系统可完全依赖计算机程序的运行来实现相应的功能,即,各个装置与计算机程序的功能架构中与各步骤相应,使得整个系统通过专门的软件包(例如,lib库)而被调用,以实现相应的功能。
另一方面,根据本发明示例性实施例的基于SQL查询语句实现实时查询服务的系统所包括的各个单元也可以通过硬件、软件、固件、中间件、微代码或其任意组合来实现。当以软件、固件、中间件或微代码实现时,用于执行相应操作的程序代码或者代码段可以存储在诸如存储介质的计算机可读介质中,使得处理器可通过读取并运行相应的程序代码或者代码段来执行相应的操作。
以上描述了本发明的各示例性实施例,应理解,上述描述仅是示例性的,并非穷尽性的,本发明不限于所披露的各示例性实施例。在不偏离本发明的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。因此,本发明的保护范围应该以权利要求的范围为准。
- 基于SQL查询语句实现实时查询服务的方法和系统
- 基于时间度量数据实时查询服务的优化实现方法及系统