一种异构数据源统一联合查询方法与流程

文档序号:14474358阅读:718来源:国知局
本发明属于电力系统数据库
技术领域
:,具体是涉及一种异构数据源统一联合查询方法。
背景技术
::随着智能电网技术的不断发展,电网企业发挥数据资源的战略资产作用,关键在于提升海量数据的管理和支撑能力,实现信息共享,为企业管理提供运营决策分析支持。然而,电网海量数据多源各异,表现为多种异构数据源并存的局面。所谓异构数据源,既包括oracle、mysql、postgresql、sybaseiq等传统关系型数据库,同时还包括cassandra、hbase、hive等nosql及数据仓库。面对庞大的数据量以及各异的数据源,往往需要使用各数据源提供的连接客户端进行单独访问,无法使用一个连接对多个数据源进行同时访问,也无法在一次连接中将不同的数据源中的数据进行关联。因此,传统的访问方式,无法满足多数据源大数据快速实时查询计算的性能要求。技术实现要素:本发明目的是:针对现有技术的不足,提供一种异构数据源统一联合查询方法。该方法能够在一次连接中,对不同的异构数据源进行统一访问,甚至可以在一次连接中,对多异构数据源中的不同数据进行关联查询,满足电网大数据查询访问时高性能、易用性、可扩展性的需求。具体地说,本发明是采用以下技术方案实现的,包括以下步骤:1)在对各异构数据源进行查询操作前,如果异构数据源支持schema、table、column的时候,遍历异构数据源中所有的schema、table、column以及其他的元数据信息,如果异构数据源不支持schema、table、column的时候,将异构数据源的数据映射到查询中间件中的schema、table、column中,再通过查询中间件中的schema、table、column遍历异构数据源中所有的元数据信息;2)查询客户端向查询中间件提交查询语句,所述查询语句为需要执行的sql语句;当得到sql语句时,查询中间件会将sql语句组装成一个请求,发送给负责解析请求的解析模块;3)解析模块对收到的请求进行解析,所述解析包括词法分析、语法分析和语义分析,最终生成整个sql语句的执行计划;4)将生成的整个sql语句的执行计划转换为查询任务,分配空闲的工作节点去执行对应查询任务的计算任务,从而将各异构数据源的数据加载至内存;5)每当查询任务产生一定的计算结果,查询中间件就向查询客户端返回相应的计算结果,直到查询客户端获得了所有的计算结果。进一步而言,所述步骤2)中,查询语句从指定的文件或命令行参数获取。进一步而言,所述步骤2)中,查询中间件会将sql语句组装成一个restful请求。进一步而言,所述步骤3)中,使用java的visitor模式对sql语句进行语法分析。进一步而言,所述步骤3)中,所述语法分析,是一个递归调用的过程,通过构造相应的节点形成一个抽象语法树。进一步而言,所述步骤3)中,使用java的visitor模式对sql语句进行语义分析。进一步而言,所述步骤3)中,根据sql语句的类型生成不同的执行计划。进一步而言,查询客户端从提交查询语句开始就会不停地从查询中间件获取本次查询的计算结果,直到获得了所有的计算结果。本发明的有益效果如下:本发明针对智能电网数据的数据源各异的情况,将原本需要新建多次连接才能完成查询的任务,放在了一次连接中完成,将整个查询过程分为定义数据源接口、提交查询、生成查询执行计划、执行sql查询计划、返回查询结果等步骤。由于在一次连接中可以同时查询多个数据源中的数据,在特定业务需求中,可以将多数据源中的数据进行关联查询;在进行海量电网数据查询处理过程中,终端用户不用等到所有数据处理完毕才能看到结果,大大提高了查询的响应速度;计算过程完全基于内存,查询效率极高。附图说明图1是本发明方法的示意图。具体实施方式下面结合实施例并参照附图对本发明作进一步详细描述。实施例1:本发明的一个实施例,公开了一种异构数据源统一联合查询方法,其主要步骤如图1所示。参见图1,图1中步骤1是定义数据源接口,即在对各异构数据源进行查询操作前,需要对特定的数据源进行如下操作:当异构数据源支持schema、table、column的时候,则实现数据源接口较容易,直接对应匹配即可,即直接异构数据源中遍历所有的schema、遍历所有的table、遍历所有的column、遍历其他的元数据信息;当异构数据源使用异构数据源特定的数据源映射到查询中间件中的schema、table、column,再通过查询中间件中的schema、table、column遍历异构数据源中所有的元数据信息。图1中步骤2是提交查询,即查询客户端向查询中间件提交查询语句,所述查询语句为需要执行的sql语句,可以从指定的文件、命令行参数获取。当得到sql语句时,查询中间件会将sql语句组装成一个请求(如一个restful请求),发送给负责解析请求的解析模块。图1中步骤3是生成查询执行计划,即解析模块对收到的请求进行解析,所述解析包括词法分析、语法分析和语义分析,最终生成整个sql语句的执行计划。先进行词法分析,完成词法分析后,使用java的visitor模式对sql语句进行语法分析。语法分析是一个递归调用的过程,通过构造相应的节点形成一个抽象语法树。语法分析完成后进行语义分析,同样使用visitor模式对sql语句进行语义分析,常见的包括showcatalogs、createview、insert、delete、select、join等。最终生成整个sql语句的执行计划,根据sql语句的类型生成不同的执行计划。图1中步骤4是执行sql查询计划,即将生成的整个sql语句的执行计划转换为查询任务,分配空闲的工作节点去执行对应查询任务的计算任务,查询中间件可以读取多种数据源中的数据,从而将各异构数据源的数据加载至内存。图1中步骤5是返回查询结果,即查询客户端从提交查询语句开始就会不停地从查询中间件获取本次查询的计算结果,每当查询任务产生一定的计算结果,查询中间件就向查询客户端返回相应的计算结果,直到查询客户端获得了所有的计算结果。以下给出本实施例的具体实施结果。将不同数据源部署在服务器上,并在各数据源中模拟某省份用电信息采集、输变电状态监测、统一车辆系统等采集监测类数据。服务器硬件配置:服务器软件配置:操作系统数据库centos6.5mysql5.7.10centos6.5postgresql9.6.3centos6.5oracle11centos6.5hbase1.2.0centos6.5hive2.0.1根据以上参数的配置,在各数据源中,分别构建列数目50列的数据表,并插入采集量测数据2亿条。通过本实施例的查询方式,对各数据源的数据查询效率如下:数据源效率(万/秒)mysql5.7.100.59postgresql9.6.30.68oracle110.76hbase1.2.09.7hive2.0.15.6如上表,本实施例对各数据源的查询效率分别为:0.59万/秒、0.68万/秒、0.76万/秒、9.7万/秒、5.6万/秒。其中,单位“万/秒”表示:每一秒钟查询多少万条数据值。在该实际的场景下,数据查询的需求大于0.4万/秒。因此,本实施例高效的满足了海量应用需求。虽然本发明已以较佳实施例公开如上,但实施例并不是用来限定本发明的。在不脱离本发明之精神和范围内,所做的任何等效变化或润饰,同样属于本发明之保护范围。因此本发明的保护范围应当以本申请的权利要求所界定的内容为标准。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1