CN112579626A - 多源异构sql查询引擎的构建方法及装置 - Google Patents
多源异构sql查询引擎的构建方法及装置 Download PDFInfo
- Publication number
- CN112579626A CN112579626A CN202011044877.2A CN202011044877A CN112579626A CN 112579626 A CN112579626 A CN 112579626A CN 202011044877 A CN202011044877 A CN 202011044877A CN 112579626 A CN112579626 A CN 112579626A
- Authority
- CN
- China
- Prior art keywords
- sqlnode
- class
- sql
- metadata
- data
- 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.)
- Pending
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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明涉及多源异构SQL查询引擎的构建方法及装置。查询引擎的构建方法包括以下步骤:步骤S1,解析数据源的元数据并内存加载;步骤S2,对数据源对应的SQL语法进行转换、封装,得到有向无环图类SqlNode,根据元数据进行校验SqlNode;步骤S3,对SqlNode进行裁剪得到摘要程序Extract,并取SqlNode根节点构成要执行的Sql语法,随后选择对应计算引擎;步骤S4,基于摘要程序Extract生成计算引擎规则所需要的java代码加载至内存容器中;步骤S5,上一步生成的java代码遍历优化并转换成类代码,执行类代码并进行数据封装,得到数据结果加载至内存中。本发明实现了多源异构数据的关联查询分析,可以满足大数据场景各种数据源的快速接入查询分析需求。
Description
技术领域
本发明涉及多源异构数据SQL查询技术,尤其涉及一种多源异构SQL查询引擎的构建方法及装置。
背景技术
现有主流数据库的操作需要在每种数据库所提供的SQL语法规则基础上进行数据库查询、写入、更新。当涉及到多个不同种类数据库表关联进行数据查询分析时,需要将数据进行迁移至同一数据库进行关联分析,给数据查询分析带来诸多不便。
目前研发人员针对不同数据库进行查询或者跨数据库查询,需要基于原有数据库提供的SQL语法进行查询。而涉及跨数据库关联查询时,则需要提前进行不同数据库的迁移抽取,存储至同一数据库后再进行多表关联查询。在多源异构数据SQL查询领域,主要使用PrestoDB查询引擎进行查询。PrestoDB是开源的支持多数据源混合查询的一个计算引擎。但是基于PrestoDB进行多数据源查询时,需要先停止PrestoDB服务,运维人员进入PrestoDB服务器对应的软件安装目录下,在其安装目录下手动对需要进行连接的数据源创建对应驱动配置文件,再启动PrestoDB服务,最终实现对已配置好的数据源进行关联查询。若要再增加一种类型数据库或连接的数据源,需重新进行上述配置流程。由此可知,PrestoDB查询引擎无法满足不同业务场景下,针对不同类型的数据库源端进行灵活兼容适配,从而很难满足在目前大数据场景各种数据源的快速接入查询分析需求。
发明内容
本发明的目的在于为克服现有技术的以上缺陷,而提供一种多源异构SQL查询引擎的构建方法及装置,以兼容适配不同类型的数据库源,以满足各种数据源的快速接入查询分析需求。
为实现上述目的,本发明采用以下技术方案:多源异构SQL查询引擎的构建方法,其包括以下步骤:
步骤S1,解析数据源的元数据并内存加载;
步骤S2,对数据源对应的SQL语法进行转换、封装,得到有向无环图类SqlNode,根据元数据进行校验SqlNode;
步骤S3,对SqlNode进行裁剪得到摘要程序Extract,并取SqlNode根节点构成要执行的Sql语法,随后选择对应计算引擎;
步骤S4,基于摘要程序Extract生成计算引擎规则所需要的java代码加载至内存容器中;
步骤S5,上一步生成的java代码遍历优化并转换成类代码,执行类代码并进行数据封装,得到数据结果加载至内存中。
步骤S1包括:
为每个数据源指定对应的数据库和数据库表工厂类,用来识别数据库和数据库表的信息;
以数据源的元数据生成Json文件;
通过动态数据源管理框架解析Json文件中的元数据;
根据解析得到的元数据创建动态工厂类信息,并将数据源的数据库类型、连接信息、连接参数、以及数据库表结构信息进行内存加载。
步骤S2包括:
基于工厂类信息,利用动态数据源管理框架配置生成计划执行器Planner;
通过计划执行器Planner使用抽象语法树算法将各种数据库类型的SQL语法进行转换,并用一个java类进行封装表示转换的结果,得到未经校验的有向无环图类SqlNode;
通过计划执行器Planner根据数据源的元数据对SqlNode进行语法验证。
步骤S2还包括:
根据SqlNode语义分析得出初步的执行计划,再结合元数据进行语法分析,读取出相关信息,再通过filter下推,将where后面的过滤条件全部挪到在join on语句中进行指定。
通过计划执行器Planner根据数据源的元数据对SqlNode进行语法验证,包括:校验SqlNode类对象中信息是否有对应的数据库表、字段、函数信息;当校验SqlNode成功后,再次以SqlNode对象信息返回,并标注已经完成语法校验操作。
步骤S3包括:
基于步骤S2得到的SqlNode创建一个有向无环图裁剪类QProcedure;
构建一个遍历SqlNode树类的SQL行,对SqlNode树类进行裁剪,返回最终的裁剪后的子树及其别名,并得到裁剪后的一个子树同步器SubtreeSyncopator,裁剪后的SqlNode分解为多个处理程序;
分解成多个处理程序的过程中返回字段、对应的数据源连接参数等转为摘要程序Extract;
裁剪类QProcedure取SqlNode根节点转为创建一个传输程序,得到要具体执行的SQL语法。
在步骤S3中,如果有多个数据源,则生成多个摘要程序Extract;若包含子查询,则为子查询分出一个摘要程序Extract。
步骤S3还包括:
基于得到的SQL语法构建基于引擎的语法分析算法,根据最小时间原则,自动选择底层计算引擎。计算引擎为Spark、Flink两种计算引擎。
步骤S4包括:
基于选择的计算引擎,创建专用的管道Pipeline,用于连接执行中的所有步骤;
利用管道Pipeline组装计算引擎所需的java类代码,并返回给初始化阶段的api调用;
通过摘要程序Extract,生成计算引擎规则所需要的java代码:将得到的数据源信息、连接信息、表字段信息放入计算引擎所需的临时表中,对裁剪类QProcedure按照包装顺序进行java代码的生成,再由api来拼接生成的java代码,拼接后的java代码加载至内存容器中。
步骤S5包括:
创建一个主题类从内存读取上一步生成的java代码,进行遍历优化,生成最终的类,加载至缓存中;
执行缓存中的类代码,通过一个执行器里面的方法来执行多源异构逻辑并进行数据封装,最终得到数据结果加载至内存中。
构建方法还包括:
步骤S6,查询引擎采用Netty架构提供TCP访问服务,在驱动程序底层构建Netty客户端对接查询引擎的TCP服务,以使用统一的数据库链接url、统一的数据库驱动类和提供创建多源元数据方法与查询引擎建立统一的连接,最后将驱动程序打包成jar驱动包。
本发明还公开一种电子设备,包括:处理器;以及存储器,存储器上存储有计算机可读指令,计算机可读指令被处理器执行时实现以上的构建方法。
本发明还公开一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以上的构建方法。
本发明与现有技术相比的有益效果是:通过对不同种类的数据源SQL语法进行解析、校验、转化、包装成统一的计算程序任务,可以快速配置所需要连接的多源异构数据库,使得用户可以通过统一的连接方式实现对各种数据源的快速连接查询,无需用户到底层进行配置任务数据源操作,用户可以随意根据业务需求进行查询分析,适用于各种数据库的灵活配置创建连接,无需任何底层软件上的操作,实现多源数据的关联查询分析,可以满足大数据场景各种数据源的快速接入查询分析需求。
本发明技术方案提供统一标准SQL语法,对SQL进行适配解析,实现对关系型及非关系型数据库进行单库或跨库多表关联查询。本发明技术方案针对标准SQL自动解析适配引擎,根据不同类型的源数据库,通过有向无环图对进行SQL自动拆解分析,并制定合理的执行计划,实现对不同数据源进行查询操作。本发明技术方案针对不同的SQL查询语法,数据计算运行时,根据SQL结构自动选择最优的大数据底层组件引擎,同时提供SPARK、FLink组件支撑。本发明技术方案基于多源异构SQL引擎基础上,封装其定义多源数据库连接驱动包,提供统一标准的连接方式,类似关系型数据库基于JDBC连接模式,用户可以通过封装的驱动包实现对各种数据源的快速连接查询。
附图说明
图1为本发明多源异构SQL查询引擎的构建方法流程图。
需要说明的是,以上视图所示产品均为适应图纸大小及视图清楚而进行了适当的缩小/放大,并不对视图所示产品大小加以限制。
具体实施方式
现在将参考附图更全面地描述示例实施例。然而,示例实施例能够以多种形式实施,且不应被理解为限于在此阐述的实施例。相反,提供这些实施例使得本公开将全面和完整,并将示例实施例的构思全面地传达给本领域的技术人员。在图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本公开的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、材料、装置、步骤等。在其它情况下,不详细示出或描述公知结构、方法、装置、实现、材料或者操作以避免模糊本公开的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个软件硬化的模块中实现这些功能实体或功能实体的一部分,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
本实施例是一个多源异构SQL查询引擎的构建方法,以实现基于查询引擎通过标准SQL对不同类型数据库包括如如MS-SQL、Oracle、MySQL、Sybase、DB2、Redis、MongodDB、Hbase、ES、Impala、HAWQ等关系型与非关系型数据库进行单源单表或多源多表跨数据库关联查询分析。终端用户可通过统一封装的多源异构SQL查询引擎的驱动包实现统一连接方式进行多源数据的灵活查询。
如图1所示,查询引擎的构建方法包括以下步骤:步骤S1,解析数据源的元数据并内存加载;步骤S2,对数据源对应的SQL语法进行转换、封装,得到有向无环图类SqlNode,根据元数据进行校验SqlNode;步骤S3,对SqlNode进行裁剪得到摘要程序Extract,并取SqlNode根节点构成要执行的Sql语法,随后选择对应计算引擎;步骤S4,基于摘要程序Extract生成计算引擎规则所需要的java代码加载至内存容器中;步骤S5,上一步生成的java代码遍历优化并转换成类代码,执行类代码并进行数据封装,得到数据结果加载至内存中;步骤S6,统一驱动封装和打包。
本发明的查询引擎构建方法通过对不同种类的数据源SQL语法进行解析、校验、转化、包装成统一的计算程序任务,可以快速配置所需要连接的多源异构数据库,使得用户可以通过统一的连接方式实现对各种数据源的快速连接查询,无需用户到底层进行配置任务数据源操作。用户可以随意根据业务需求进行查询分析,适用于各种数据库的灵活配置创建连接。用户无需任何底层软件上的操作,轻易实现多源数据的关联查询分析,可以满足大数据场景各种数据源的快速接入查询分析需求。
以下对查询引擎的构建方法的步骤进一步具体解释说明。
在步骤S1之前,先预设需要连接的不同类型数据库,用于实现对不同类型数据库的统一SQL语法查询分析。具体地,数据库可以是关系型或非关系型数据库,包括但不限于如MS-SQL、Oracle、MySQL、Sybase、DB2、Redis、MongodDB、Hbase、ES、Impala、HAWQ等数据库。需要对不同类型数据库SQL语法进行解析适配。
步骤S1是根据标准SQL语法进行解析任务的初始化工作。具体地,在步骤S1中,需要先为每个数据源指定对应的数据库和数据库表工厂类,用来识别数据库和数据库表的信息。然后以数据源的元数据(metadata)生成Json文件。JSON(JavaScript ObjectNotation)是一种轻量级的数据交换格式,既易于人阅读和编写,同时也易于机器解析和生成。数据源的元数据包括有数据库表结构信息、数据库账号、数据库密码、类型、地址。随后通过动态数据源管理框架解析Json文件中的元数据。常见的动态数据源管理框架有ApacheCalcite。用解析之后得到的元数据创建动态工厂类信息,最后将数据源的数据库类型、连接信息、连接参数、以及数据库表结构信息进行内存加载,等待后续步骤读取调用。
步骤S2是进行标准SQL解析、校验与优化。具体地,在步骤S2中,先基于上一步创建的动态工厂类信息,利用动态数据源管理框架(譬如Apache Calcite)配置生成计划执行器Planner。计划执行器Planner是一种Java类。随后通过计划执行器Planner使用通用的抽象语法树(AST)算法将各种数据库类型的SQL语法进行转换,并用一个java类进行封装表示转换的结果,得到未经校验的有向无环图类SqlNode(抽象语法类、有向无环图DAG对象信息)。随后通过计划执行器Planner根据数据源的元数据对SqlNode进行语法验证,包括:校验SqlNode类对象中信息是否有对应的数据库表、字段、函数等信息;当校验SqlNode成功后,再次以SqlNode对象信息返回,并标注已经完成语法校验操作。随后对SqlNode语义分析得出初步的执行计划,再结合步骤S1所得元数据进行语法分析,读取出连接数据源的方式、select要返回的数据、where过滤条件、要扫描的表等信息。随后通过filter下推,将where后面的过滤条件全部挪到在join on语句中进行指定。这样优化步骤可以大大减少join的数据量,SQL语法执行性能得到提升。
步骤S3是进行SQL裁剪、转化,并选择计算引擎。具体地,在步骤S3中,先基于步骤S2得到的已经优化的SqlNode创建一个有向无环图裁剪类QProcedure。然后构建一个遍历SqlNode树类的SQL行,用于对SqlNode树类进行裁剪,返回最终的裁剪后的子树及其别名,并得到裁剪后的一个子树同步器SubtreeSyncopator,裁剪后的SqlNode分解为多个处理程序。分解成多个处理程序的过程中所返回的字段、对应的数据源连接参数等转为摘要程序Extract,用于临时存储信息。在步骤S3中,如果有多个数据源,则生成多个摘要程序Extract。若包含子查询,子查询即使是有相同数据源,则为子查询分出一个摘要程序Extract。裁剪类QProcedure取SqlNode根节点转为创建一个传输程序,得到要具体执行的SQL语法。最后创建一个适配器通道,基于得到的SQL语法构建基于计算引擎的语法分析算法,运行语法分析算法分析耗时,根据最小时间原则,自动适配最佳的底层计算引擎。底层计算框框架提供Spark、Flink两种计算引擎供选择。
步骤S4的作用是计算任务包装、任务提交和执行。具体地,步骤S4中,先基于步骤S3适配的的Spark或Flink计算引擎,创建专用的管道Pipeline,用于连接执行中的所有步骤。然后利用管道Pipeline组装计算引擎所需的java类代码,并返回给初始化阶段的各种api调用。封装一个引入包类,用于导入java代码执行时所需要调用的java包。通过前面步骤生成的摘要程序Extract,生成计算引擎规则所需要的java代码。将前面步骤所得到的数据源信息、连接信息、表字段信息等放入计算引擎所需的临时表中,采用里面包含了一个正常的java类代码需要有的元素:import、class、inner_class、method、sentence。这些元素进行按以下顺序依次包装:import、class、inner_class、method、sentence。根据前面步骤得到的裁剪类QProcedure,对QProcedure按照以上包装顺序进行java代码的生成,再由一个api来拼接生成的java代码,拼接后的java代码加载至内存容器中。
步骤S5作用是缓存类生成、数据封装、数据内存落盘。具体地,在步骤S5中,先创建一个主题类从内存读取前面步骤S4生成的java代码,再进行遍历优化,生成最终的类,加载至缓存中。随后执行缓存中的类代码,通过一个执行器里面的方法来执行多源异构逻辑并进行数据封装,将执行的任务提交到计算组件集群中运行,最终得到数据结果加载至内存中。在进行查询时可以通过读取内存数据最终得到查询结果数据。执行多源异构逻辑有如下步骤:先执行缓存中的类代码的核心execute方法;接入数据源信息,若是多个数据源,则按照顺序依次接入(先后顺序不定),计算引擎spark/flink每次接入数据源根据前面形成的摘要程序Extract,进行该数据源的初始化数据,并创建spark/flink临时表;计算引擎spark/flink根据得到的多个数据源形成的临时表和步骤S3最终优化的sql语句进行sql查询;查询得到的结果进行数据集封装落入内存中,同时把该数据集返回。
步骤S6作用是驱动封装打包。所构建的查询引擎采用Netty架构对外提供TCP访问服务,包括:建立连接、执行查询、返回数据、返回源数据等功能。具体地,在步骤S6中,需要在驱动程序底层构建Netty客户端对接查询引擎的Netty TCP服务,以使用统一的数据库链接url(jdbc:jxbd://查询引擎ip:端口)、统一的数据库驱动类(com.jxbd.sql.Driver)和提供创建多源元数据方法与查询引擎建立统一的连接,最后将驱动程序打包成jar驱动包(jxbd-sql-connector.jar)。在使用时,终端用户通过本地端加载jar驱动包或者通过远程连接,随后通过统一服务地址url(jdbc:jxbd://查询引擎ip:端口)连接到查询引擎,用户可以使用标准SQL语法最终实现多源异构数据库的查询分析。
此外,在本发明的实施例中,还提供了一种能够实现上述方法的电子设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施例、完全的软件实施例(包括固件、微代码等),或硬件和软件方面结合的实施例,这里可以统称为“电路”、“模块”或“系统”。
电子设备以通用计算设备的形式表现。电子设备的组件可以包括但不限于:上述至少一个处理单元、上述至少一个存储单元、连接不同系统组件(包括存储单元和处理单元)的总线、显示单元。
其中,存储单元存储有程序代码,程序代码可以被处理单元执行,使得处理单元执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。例如,处理单元可以执行如图1中所示的步骤S1至步骤S6。
存储单元可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)和/或高速缓存存储单元,还可以进一步包括只读存储单元(ROM)。
存储单元还可以包括具有一组(至少一个)程序模块的程序/实用工具,这样的程序模块包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备也可以与一个或多个外部设备(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备交互的设备通信,和/或与使得该电子设备能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口进行。并且,电子设备还可以通过网络适配器与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器通过总线与电子设备的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
通过以上的实施例的描述,本领域的技术人员易于理解,这里描述的示例实施例可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施例的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开实施例的方法。
在本公开的示例性实施例中,还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述查询引擎构建方法的程序产品。在一些可能的实施例中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的步骤。
根据本发明的实施例的用于实现上述方法的程序产品,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
此外,上述附图仅是根据本发明示例性实施例的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施例。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限。
Claims (14)
1.多源异构SQL查询引擎的构建方法,其特征在于,其包括以下步骤:
步骤S1,解析数据源的元数据并内存加载;
步骤S2,对数据源对应的SQL语法进行转换、封装,得到有向无环图类SqlNode,根据元数据进行校验SqlNode;
步骤S3,对SqlNode进行裁剪得到摘要程序Extract,并取SqlNode根节点构成要执行的Sql语法,随后选择对应计算引擎;
步骤S4,基于摘要程序Extract生成计算引擎规则所需要的java代码加载至内存容器中;
步骤S5,上一步生成的java代码遍历优化并转换成类代码,执行类代码并进行数据封装,得到数据结果加载至内存中。
2.如权利要求1所述的构建方法,其特征在于,所述步骤S1包括:
为每个数据源指定对应的数据库和数据库表工厂类,用来识别数据库和数据库表的信息;
以数据源的元数据生成Json文件;
通过动态数据源管理框架解析Json文件中的元数据;
根据解析得到的元数据创建动态工厂类信息,并将数据源的数据库类型、连接信息、连接参数、以及数据库表结构信息进行内存加载。
3.如权利要求1所述的构建方法,其特征在于,所述步骤S2包括:
基于所述工厂类信息,利用动态数据源管理框架配置生成计划执行器Planner;
通过计划执行器Planner使用抽象语法树算法将各种数据库类型的SQL语法进行转换,并用一个java类进行封装表示转换的结果,得到未经校验的有向无环图类SqlNode;
通过计划执行器Planner根据数据源的元数据对SqlNode进行语法验证。
4.如权利要求3所述的构建方法,其特征在于,所述步骤S2还包括:
根据SqlNode语义分析得出初步的执行计划,再结合元数据进行语法分析,读取出相关信息,再通过filter下推,将where后面的过滤条件全部挪到在join on语句中进行指定。
5.如权利要求3所述的构建方法,其特征在于,通过计划执行器Planner根据数据源的元数据对SqlNode进行语法验证,包括:校验SqlNode类对象中信息是否有对应的数据库表、字段、函数信息;当校验SqlNode成功后,再次以SqlNode对象信息返回,并标注已经完成语法校验操作。
6.如权利要求1所述的构建方法,其特征在于,所述步骤S3包括:
基于步骤S2得到的SqlNode创建一个有向无环图裁剪类QProcedure;
构建一个遍历SqlNode树类的SQL行,对SqlNode树类进行裁剪,返回最终的裁剪后的子树及其别名,并得到裁剪后的一个子树同步器SubtreeSyncopator,裁剪后的SqlNode分解为多个处理程序;
分解成多个处理程序的过程中返回字段、对应的数据源连接参数等转为摘要程序Extract;
裁剪类QProcedure取SqlNode根节点转为创建一个传输程序,得到要具体执行的SQL语法。
7.如权利要求6所述的构建方法,其特征在于,在步骤S3中,如果有多个数据源,则生成多个摘要程序Extract;若包含子查询,则为子查询分出一个摘要程序Extract。
8.如权利要求6所述的构建方法,其特征在于,所述步骤S3还包括:
基于得到的SQL语法构建基于引擎的语法分析算法,根据最小时间原则,自动选择底层计算引擎。
9.如权利要求8所述的构建方法,其特征在于,所述计算引擎为Spark、Flink两种计算引擎。
10.如权利要求6所述的构建方法,其特征在于,所述步骤S4包括:
基于选择的计算引擎,创建专用的管道Pipeline,用于连接执行中的所有步骤;
利用管道Pipeline组装计算引擎所需的java类代码,并返回给初始化阶段的api调用;
通过摘要程序Extract,生成计算引擎规则所需要的java代码:将得到的数据源信息、连接信息、表字段信息放入计算引擎所需的临时表中,对裁剪类QProcedure按照包装顺序进行java代码的生成,再由api来拼接生成的java代码,拼接后的java代码加载至内存容器中。
11.如权利要求1所述的构建方法,其特征在于,所述步骤S5包括:
创建一个主题类从内存读取上一步生成的java代码,进行遍历优化,生成最终的类,加载至缓存中;
执行缓存中的类代码,通过一个执行器里面的方法来执行多源异构逻辑并进行数据封装,最终得到数据结果加载至内存中。
12.如权利要求1所述的构建方法,其特征在于,还包括:
步骤S6,查询引擎采用Netty架构提供TCP访问服务,在驱动程序底层构建Netty客户端对接查询引擎的TCP服务,以使用统一的数据库链接url、统一的数据库驱动类和提供创建多源元数据方法与查询引擎建立统一的连接,最后将驱动程序打包成jar驱动包。
13.一种电子设备,其特征在于,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时实现根据权利要求1至12中任一项所述的方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现根据权利要求1至12中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011044877.2A CN112579626A (zh) | 2020-09-28 | 2020-09-28 | 多源异构sql查询引擎的构建方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011044877.2A CN112579626A (zh) | 2020-09-28 | 2020-09-28 | 多源异构sql查询引擎的构建方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112579626A true CN112579626A (zh) | 2021-03-30 |
Family
ID=75119725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011044877.2A Pending CN112579626A (zh) | 2020-09-28 | 2020-09-28 | 多源异构sql查询引擎的构建方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112579626A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112487075A (zh) * | 2020-12-29 | 2021-03-12 | 中科院计算技术研究所大数据研究院 | 一种集成关系型和非关系型数据库数据转换的算子 |
CN113064838A (zh) * | 2021-05-07 | 2021-07-02 | 阿里云计算有限公司 | 一种代码调试方法、装置、用户设备、服务端及存储介质 |
CN113553533A (zh) * | 2021-06-10 | 2021-10-26 | 国网安徽省电力有限公司 | 一种基于数字化内部五级市场考核体系的指标计算方法 |
CN113641628A (zh) * | 2021-08-13 | 2021-11-12 | 中国联合网络通信集团有限公司 | 数据质量检测方法、装置、设备及存储介质 |
CN114756629A (zh) * | 2022-06-16 | 2022-07-15 | 之江实验室 | 基于sql的多源异构数据交互分析引擎及方法 |
CN115061689A (zh) * | 2022-06-15 | 2022-09-16 | 五矿国际信托有限公司 | 一种存储过程转java代码的框架设计方法及系统 |
CN115577157A (zh) * | 2022-11-24 | 2023-01-06 | 河北热点科技股份有限公司 | 多数据源元数据终端查询快速比对方法及系统 |
CN116953758A (zh) * | 2023-09-19 | 2023-10-27 | 广东省科技基础条件平台中心 | 一种基于5g和北斗的卫生应急作业平台系统及方法 |
CN117056316A (zh) * | 2023-10-10 | 2023-11-14 | 之江实验室 | 一种多源异构数据关联查询加速方法、装置及设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678603A (zh) * | 2013-12-13 | 2014-03-26 | 江苏物联网研究发展中心 | 多源异构数据高效汇聚存取架构系统 |
CN104008135A (zh) * | 2014-05-07 | 2014-08-27 | 南京邮电大学 | 一种多源异构数据库融合系统及其数据查询方法 |
CN104794147A (zh) * | 2013-12-30 | 2015-07-22 | 深圳键桥通讯技术股份有限公司 | 异构数据库访问方法 |
-
2020
- 2020-09-28 CN CN202011044877.2A patent/CN112579626A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678603A (zh) * | 2013-12-13 | 2014-03-26 | 江苏物联网研究发展中心 | 多源异构数据高效汇聚存取架构系统 |
CN104794147A (zh) * | 2013-12-30 | 2015-07-22 | 深圳键桥通讯技术股份有限公司 | 异构数据库访问方法 |
CN104008135A (zh) * | 2014-05-07 | 2014-08-27 | 南京邮电大学 | 一种多源异构数据库融合系统及其数据查询方法 |
Non-Patent Citations (1)
Title |
---|
QIHOO360: "Quicksql", 《HTTPS://GITEE.COM/MIRRORS_QIHOO360/QUICKSQL/TREE/V0.7.0》 * |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112487075A (zh) * | 2020-12-29 | 2021-03-12 | 中科院计算技术研究所大数据研究院 | 一种集成关系型和非关系型数据库数据转换的算子 |
CN112487075B (zh) * | 2020-12-29 | 2021-08-31 | 中科院计算技术研究所大数据研究院 | 一种集成关系型和非关系型数据库数据转换算子的方法 |
CN113064838A (zh) * | 2021-05-07 | 2021-07-02 | 阿里云计算有限公司 | 一种代码调试方法、装置、用户设备、服务端及存储介质 |
CN113553533A (zh) * | 2021-06-10 | 2021-10-26 | 国网安徽省电力有限公司 | 一种基于数字化内部五级市场考核体系的指标计算方法 |
CN113641628A (zh) * | 2021-08-13 | 2021-11-12 | 中国联合网络通信集团有限公司 | 数据质量检测方法、装置、设备及存储介质 |
CN113641628B (zh) * | 2021-08-13 | 2023-06-16 | 中国联合网络通信集团有限公司 | 数据质量检测方法、装置、设备及存储介质 |
CN115061689A (zh) * | 2022-06-15 | 2022-09-16 | 五矿国际信托有限公司 | 一种存储过程转java代码的框架设计方法及系统 |
CN114756629B (zh) * | 2022-06-16 | 2022-10-21 | 之江实验室 | 基于sql的多源异构数据交互分析引擎及方法 |
CN114756629A (zh) * | 2022-06-16 | 2022-07-15 | 之江实验室 | 基于sql的多源异构数据交互分析引擎及方法 |
CN115577157A (zh) * | 2022-11-24 | 2023-01-06 | 河北热点科技股份有限公司 | 多数据源元数据终端查询快速比对方法及系统 |
CN115577157B (zh) * | 2022-11-24 | 2023-02-28 | 河北热点科技股份有限公司 | 多数据源元数据终端查询快速比对方法及系统 |
CN116953758A (zh) * | 2023-09-19 | 2023-10-27 | 广东省科技基础条件平台中心 | 一种基于5g和北斗的卫生应急作业平台系统及方法 |
CN116953758B (zh) * | 2023-09-19 | 2023-12-26 | 广东省科技基础条件平台中心 | 一种基于5g和北斗的卫生应急作业平台系统及方法 |
CN117056316A (zh) * | 2023-10-10 | 2023-11-14 | 之江实验室 | 一种多源异构数据关联查询加速方法、装置及设备 |
CN117056316B (zh) * | 2023-10-10 | 2024-01-26 | 之江实验室 | 一种多源异构数据关联查询加速方法、装置及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112579626A (zh) | 多源异构sql查询引擎的构建方法及装置 | |
CN112579625A (zh) | 多源异构数据治理方法及装置 | |
JP2015072688A (ja) | Hadoopにおける強化されたSQLライクなクエリのためのバックグラウンドフォーマット最適化 | |
US20160103931A1 (en) | Translation of a sparql query to a sql query | |
US9563650B2 (en) | Migrating federated data to multi-source universe database environment | |
US8417690B2 (en) | Automatically avoiding unconstrained cartesian product joins | |
US9928288B2 (en) | Automatic modeling of column and pivot table layout tabular data | |
US20210209098A1 (en) | Converting database language statements between dialects | |
JP5791149B2 (ja) | データベース・クエリ最適化のためのコンピュータで実装される方法、コンピュータ・プログラム、およびデータ処理システム | |
CN110688544A (zh) | 一种查询数据库的方法、设备及存储介质 | |
CN109947791A (zh) | 一种数据库语句优化方法、装置、设备及存储介质 | |
US9971794B2 (en) | Converting data objects from multi- to single-source database environment | |
CN117093599A (zh) | 面向异构数据源的统一sql查询方法 | |
CN114356964A (zh) | 数据血缘构建方法、装置、存储介质及电子设备 | |
CN111694846B (zh) | 一种基于Type 2 JDBC驱动的分离模式分布式存储过程实现方法 | |
US20180203900A1 (en) | Transforming a user-defined table function to a derived table in a database management system | |
US20170262507A1 (en) | Feedback mechanism for query execution | |
US9280582B2 (en) | Optimization of join queries for related data | |
CN116795859A (zh) | 数据分析方法、装置、计算机设备和存储介质 | |
WO2021259367A1 (zh) | 统一sql的方法、系统、设备及介质 | |
CN114003583A (zh) | 一种目标格式数据请求体的构建方法、装置、介质及设备 | |
CN113515285A (zh) | 生成实时计算逻辑数据的方法和装置 | |
CN115952203B (zh) | 数据查询方法、设备、系统及存储介质 | |
CN117555925B (zh) | 数据库访问代码转换方法、装置及电子设备 | |
CN115563183B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210330 |