基于自定义SQL脚本进行多源异构数据库联合查询的方法与流程

专利2024-11-17  53


基于自定义sql脚本进行多源异构数据库联合查询的方法
技术领域
1.本发明涉及多源异构数据库,具体涉及一种多源异构数据库数据联合查询的方法,属于计算机通信技术领域。


背景技术:

2.随着大数据技术的发展,数据库在各行各业业务中的应用日趋普遍,业务数据越来越多地通过相应的数据库进行存储。现实生活的复杂性必然导致产生一些数据量大的业务,这些业务的数据单靠一个数据库无法解决问题,需要通过分库分表方式进行数据存储才能满足业务的存储需求。而且当前也会将业务数据存放在不同类型的数据库中,如一些业务数据存在mysql数据库、一些业务数据存放在oracle数据库或是sqlserver数据库。这样就必然地产生了对多源异构数据库进行联合数据分析查询的需求。对于业务数据存放在不同类型的数据库的情况,现有sql(sql是structured query language的缩写,是一种访问关系型数据库的标准语言)的技术只支持同一数据库的操作,即只支持查询存储在同一数据库中的数据。目前想要对存储在多源异构数据库中的数据联合查询只能针对业务需求进行定制化开发,即同步不同的数据源到统一数据库中,再进行关联查询,开发起来比较复杂,从数据抽取同步到数据检索,每一步都需要独立开发,需要考虑多源异构数据的同步问题,比较繁琐,降低了工作效率,提高了人工成本和后期运行维护的成本。
3.中国发明公开说明书cn113761047a公开了一种面向多源异构大数据的可视化联动效果实现方法,包括以下步骤:s1、创建数据源,生成连接模板,配置数据源信息;s2、采用自定义查询语句,对接入数据源进行不同维度的预处理,包括数据二次或多次处理,并缓存预处理结果集;s3、根据步骤s2中缓存的结果数据集和数据集本身特点,选择符合的可视化组件,完成从数据到图表的制作;s4、从步骤s3中的可视化组件中选择需要联动呈现的图表,完成联动设置。
4.此发明s2步骤中,对数据源的预处理仍属于定制化开发,开发起来较为繁琐。
5.本技术人发现现有技术至少存在以下技术问题:1、现有技术中,想要对存储在多源异构数据库中的数据联合查询只能针对业务需求进行定制化开发,开发起来比较复杂,降低了工作效率;2、现有技术中,多源异构数据库中的数据联合查询方法人工编写脚本的成本和后期运行维护成本较高。


技术实现要素:

6.本发明的目的在于提供一种基于自定义sql脚本进行多源异构数据库联合查询的方法,以解决现有技术中想要对存储在多源异构数据库中的数据联合查询只能针对业务需求进行定制化开发,开发起来比较复杂,降低了工作效率,人工编写脚本的成本和后期运行维护成本较高的技术问题。
7.为实现上述目的,本发明提供了以下技术方案:
本发明提供的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,使用java语言,基于springboot框架进行开发,其方法包括:1.获取用户输入的自定义sql查询语句;2.解析所述自定义sql查询语句中指定的数据库名和表名;3.根据所述数据库名和表名,连接所述数据库名对应的数据库并提取所述数据库中的数据同步至存储空间的同时,处理自定义sql语句中的参数,将所述自定义sql语句转换为标准sql语句;4.执行所述标准sql语句,从所述存储空间进行查询;5将查询得到的数据返还用户。
8.进一步地,所述自定义sql查询语句中用大括号的方式将数据库名称包围,其后用点的方式连接表名,例:{mysqldb}.user,代表着操作的表user是隶属于名称为mysqldb这个库的,缺省情况下是使用本地库。
9.进一步地,在sql中使用#{param}的方式定义参数,param代表定义的参数名称,使用动态参数功能时,需要根据具体的业务场景传入参数值。在sql解析的时候会自动注入变量的值,对于没有传入的变量会自动剔除,不影响整体sql的执行。
10.进一步地,自定义sql语句根据规则约定解析sql,并转换为标准sql语句。
11.进一步地,数据的抽取过程有两种,包括手动方式和自动方式。
12.进一步地,手动方式通过指定源数据库的表和目标数据库的表,调用数据api的方式进行数据的抽取;自动方式根据开发人员编写的sql语句,利用dynamic-datasource技术,动态连接多种数据库并自动抽取数据。本发明抽取数据使用的是自动方法。
13.进一步地,数据同步的方式分为两种,包括离线模式和实时模式。
14.进一步地,离线模式用fink技术将目标库同步到本地库中,并定时进行增量同步数据;实时模式利用flink-cdc技术,将数据抽取到内存中,建立临时数据表,以达到查询实时数据的效果。
15.2.基于上述技术方案,本发明实施例至少可以产生如下技术效果:(1)本发明提供的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,包括根据sql语句实现自动化同步数据的功能,能够提升开发效率。
16.(2)本发明提供的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,将数据开发和数据同步的功能集成到一起,省去了数据同步功能的定制化开发过程,使后端开发人员可以忽略数据同步带来的技术问题,同时也节约了人工编写运行脚本及后期运维的成本。
附图说明
17.图1是本发明一个实施例的方法流程示意图;图中:1、 自定义sql查询;2、 解析sql语句中的指定的数据库名和表名;3、根据数据库名进行数据库表的同步;4、处理sql中的动态参数,解析为标准的sql语句;5、执行sql;6、返回数据。
具体实施方式
18.本发明提供了一种基于自定义sql脚本进行多源异构数据库联合查询的方法,如附图1所示,为本发明实施例处理业务数据的方法流程图,该方法包括:1:获取用户输入的自定义sql查询语句。
[0019] 为了可以在处理与路由无关的业务数据和存放在不同类型的数据库的业务数据时,不需要通过离线分析处理、在线写大量sql语句,本实施例设置了自定义sql语句,通过自定义sql语句可以处理与路由无关的业务数据和存放在不同类型的数据库的业务数据,可以实现分布式处理。本实施例中,spring boot集成mybatis-plus框架后,基于已经创建好的spring boot工程,可添加自定义的sql实现复杂查询等操作。
[0020]
自定义sql语句中用大括号的方式将数据库名称包围,其后用点的方式连接表名,例:{mysqldb}.user,代表着操作的表user是隶属于名称为mysqldb这个库的,缺省情况下是使用本地库。另外在sql语句中使用#{param}方式设置参数值。参数是某一种条件或称变量,假设数据库名为mysqldb,表为user,参数是x,则该自定义sql语句指向mysqldb数据库中表user中符合条件x的数据。
[0021]
2:解析所述自定义sql查询语句中指定的数据库名和表名。
[0022]
使用sql解析器获取自定义sql语句中的数据库名、表名。
[0023]
3:根据所述数据库名和表名,动态连接所述数据库名对应的数据库并提取所述数据库中的数据同步至存储空间。
[0024]
具体地,这一步骤中使用dynamic-datasource技术。进一步具体来说,是运用dynamic-datasource-spring-boot-starter ,是一个基于springboot的快速集成多数据源的启动器,可以实现动态增减数据源、数据源分组、纯粹多库、读写分离、一主多从、从其他数据库或者配置中心读取数据源等多种功能,可以集成所述mybatis-plus,能非常方便地集成多数据源。简而言之,dynamic-datasource-spring-boot-starter可以实现根据解析获取的数据库名和表名动态链接多数据源并获取数据。
[0025]
如附图1所示,在获取了数据库名和表名后,使用dynamic-datasource-spring-boot-starter在数据源连接池中获取mysql数据库和oracle数据库的数据源连接,完成与mysql数据库和oracle数据库连接并读取数据。
[0026]
读取mysql数据库和oracle数据库中数据之后,还需将数据同步到本地库中。所述数据同步到本地库的方式有两种:第一种:离线模式用fink技术将目标库同步到本地库中,并定时进行增量同步数据;第二种:实时模式利用flink-cdc技术,将数据抽取到内存中,建立临时数据表,以达到查询实时数据的效果。
[0027]
flink是一个针对流数据和批数据的分布式处理引擎,只需很少的配置就可以实现高吞吐率和低延迟。作为大数据主流运用的计算引擎之一,flink近年来发展趋势惊人,在大数据业务中的应用日趋普遍。
[0028]
采用离线模式的基础是数据业务中定时输出的需求。在flink流处理中需要将任务处理的结果数据定时输出到外部存储中,如果单条输出可能会对外部存储造成较大的压力,而采用批量输出的方式,就是当需要输出的数据累积到一定大小然后批量写入外部存
储中,可能会出现这样的问题:某些业务可能有高低峰期,在高峰的时候,批量输出在外部存储中可以很快查询到数据,但是在业务低峰时可能很长时间都无法达到输出条件,导致的结果是很长时间用户无法在外部存储中读取数据。因此有必要对读取的数据做定时输出。
[0029]
本实施例中,定时输出的方式是,自定义streamoperator继承abstractstreamoperator,获取processingtimeservice对象,进而使用flink自带的定时器功能完成数据的定时增量同步。同步的数据存储在本地库中(本地库是指驻留于运行客户应用程序的机器的数据库)。
[0030]
实时模式需要用到flink-cdc技术。cdc是一种可以捕获数据库变更的技术,用于数据同步、数据分发和数据采集等多个现实场景,其核心原理是,监测并捕获数据库的变动,包括数据或数据表的插入、更新、删除等,将这些变更按发生的顺序完整记录下来,写入到消息中间件以供其他服务进行消费。cdc技术有两种实现方式:基于查询和基于binlog(日志)。基于binlog的方式应用较广,而flink-cdc也是基于binlog的。flink-cdc属于事件接收模式,可以通过日志来实现。当数据源表发生变动时,会通过附加在表上的binlog 途径,将操作记录下来,因而下游可以通过数据库底层的协议,订阅并消费这些事件,然后对数据库变动记录做重放,从而实现同步,这种方式的优点是实时性高,可以精确捕捉上游的各种变动。在本实施例中,采用集成了debezium引擎(用于抽取数据库日志并获取变更)的flink-cdc-connectors可以将读取的数据实时存储到内存中,建立临时数据表,供自定义sql语句解析成的标准sql语句进行查询操作。
[0031]
4:处理自定义sql语句中的参数,将所述自定义sql语句转换为标准sql语句。
[0032]
第三步和第四步是同时并行的。
[0033]
5:执行所述标准sql语句,从所述存储空间中进行查询。
[0034]
存储空间可以是本地库,也可以是内存。当存储空间是内存时,可以实时完成数据读取的功能。
[0035]
6:将查询得到的数据返还用户。
[0036]
具体来说,将在本地库或内存中执行标准sql语句得到的结果显示在用户界面。
[0037]
可以理解,本发明是通过本实施例进行描述的,本领域技术人员知悉的,在不脱离本发明的精神和范围的情况下,可以对这些特征和本实施例进行各种改变或等效替换。另外,在本发明的教导下,可以对这些特征和本实施例进行修改以适应具体的情况而不会脱离本发明的精神和范围。因此,本发明不受此处所公开的具体实施例的限制,所有落入本技术的权利要求范围内的实施例都属于本发明所保护的范围内。

技术特征:
1.一种基于自定义sql脚本进行多源异构数据库联合查询的方法,其特征在于,所述方法包括:获取用户输入的自定义sql查询语句;解析所述自定义sql查询语句中指定的数据库名和表名;根据所述数据库名和表名,动态连接所述数据库名对应的数据库并提取所述数据库中的数据同步至存储空间的同时,处理自定义sql语句中的参数,将所述自定义sql语句转换为标准sql语句;执行所述标准sql语句,从所述存储空间中进行查询;将查询得到的数据返还用户。2.根据权利要求1所述的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,其特征在于,所述自定义sql语句用大括号将数据库名称包围,在所述大括号后用点连接表名。3.根据权利要求2所述的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,其特征在于,所述自定义sql语句当大括号中的数据库名缺省时,默认使用本地库。4.根据权利要求1所述的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,其特征在于,所述自定义sql语句中使用#{param}的方式定义参数,param代表定义的参数名称,在sql解析的时候会自动注入参数的值,对于没有传入的参数会自动剔除。5.根据权利要求1所述的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,其特征在于,所述提取数据通过dynamic-datasource完成。6.根据权利要求1所述的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,其特征在于,所述同步数据至存储空间包括离线模式和实时模式。7.根据权利要求6所述的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,其特征在于,所述离线模式利用fink技术将目标库同步到本地库中,并定时进行增量同步数据。8.根据权利要求6所述的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,其特征在于,所述实时模式利用flink-cdc技术,将数据抽取到内存中,建立临时数据表。9.根据权利要求1所述的一种基于自定义sql脚本进行多源异构数据库联合查询的方法,其特征在于,所述方法基于springboot框架,使用java语言开发。

技术总结
本发明公开了一种基于自定义SQL脚本进行多源异构数据库联合查询的方法,属于计算机通信技术领域,解决了现有技术中想要对存储在多源异构数据库中的数据联合查询只能针对业务需求进行定制化开发,开发复杂,降低工作效率,开发成本和后期运维成本高的技术问题。它包括:获取自定义SQL查询语句;解析自定义SQL查询语句中指定的数据库名和表名;根据数据库名和表名,连接数据库名对应的数据库并提取数据库中的数据同步至存储空间的同时,处理自定义SQL语句中的参数,将自定义SQL语句转换为标准SQL语句;执行标准SQL语句,从存储空间中进行查询;将查询所得数据返还用户。本发明根据SQL语句实现自动化同步数据的功能,有效降低开发成本,提升开发效率。提升开发效率。提升开发效率。


技术研发人员:王健
受保护的技术使用者:启明信息技术股份有限公司
技术研发日:2022.06.30
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-10356.html

最新回复(0)