本发明涉及数据库技术领域,具体是一种基于dremio实现跨数据源分布式查询系统和方法。
背景技术
跨数据源分布式查询是近年来业界的研究热点之一。传统的关系数据库由于可扩展性和处理性能的限制无法满足其要求。新兴的nosql数据库具有良好的可扩展性,需要将不同数据源数据汇聚到同一个数据库里,但不支持sql和索引等传统数据库特性。
apachedrill是一个低延迟的大型数据集的分布式查询引擎,包括结构化和半结构化数据/嵌套。其灵感来自于谷歌的dremel,drill的设计规模为上千台节点并且能与bi或分析环境互动查询。在大型数据集上,drill可以用于短,交互式的临时查询。drill能够用于嵌套查询,像json格式,parquet格式以及动态的执行查询。drill不需要一个集中的元数据仓库。
现有技术问题是基于一个nosql或rdbms数据源或者同一种类型的nosql或rdbms数据源,这些数据源往往自己就有一些自定义的sql语法,这些跨集群的分布式查询技术只能解决单一的同类型数据库查询需求,无法对多个不同类型数据源进行查询分析。
技术实现要素:
本发明的目的在于提供一种基于dremio实现跨数据源分布式查询系统和方法,以解决上述背景技术中提出的问题。
为实现上述目的,本发明提供如下技术方案:
一种基于dremio实现跨数据源分布式查询系统,包括sql预执行优化模块、元数据更新模块、sql加速器模块和查询接口模块;
sql预执行优化模块,用于根据元数据,通过dremio管理页面编写sql语句,并能可视化的操作groupby和join,拼接复制sql语句;
元数据更新模块,用于定制开发元数据的更新;
sql加速器模块,用于对sql进行最优化处理时进行加速生效;
查询接口模块,用于保障dremio的稳定运行。
作为本发明进一步的方案:所述元数据更新模块包括实时更新元数据、手动更新元数据、触发更新元数据和source定期自动更新元数据4种模式。
一种基于dremio实现跨数据源分布式查询方法,包括如下步骤:
(1)、搭建dremio集群,同一个配置多个不同的source;
(2)、预执行sql并查看执行计划,对sql进行优化并配合可视化执行计划调整sql;
(3)、选择出最优化sql,编写sql模板并绑定sqlid;
(4)、执行sqlid和sql参数,查询sql并获取结果。
与现有技术相比,本发明的有益效果是:
所述一种基于dremio实现跨数据源分布式查询系统和方法,基于dremio来实现跨数据源分布式查询,借助dremio支持异构数据源、跨数据源join查询、加速器等功能特性来达到跨异构数据源即时查询数据。dremio通过sql解析,将查询分拆到不同的数据源,并通过parquet格式存储数据、通过arrow格式传输数据,并且将sql执行计划下推,同一个数据源获取最小量的数据,以最低的成本、统一的数据格式来进行join操作,无需进行额外的数据转换即可返回查询结果,本发明使用dremio以支持不同跨数据源分布式查询,对于数据分散在不同类型数据库、海量数据分布的场景,剪掉数据的etl过程,同时提升了数据的实时性和吞吐量,可以定制化开发sql以满足更多的业务需求。
附图说明
图1为一种基于dremio实现跨数据源分布式查询系统和方法中sal分布式执行流程图。
图2为一种基于dremio实现跨数据源分布式查询系统和方法中sal分布式执行流程图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1和图2,本发明实施例中,一种基于dremio实现跨数据源分布式查询系统,
包括sql预执行优化模块、元数据更新模块、sql加速器模块和查询接口模块;
sql预执行优化模块,用于根据元数据,通过dremio管理页面编写sql语句,并能可视化的操作groupby和join,拼接复制sql语句,具体步骤为:
a.配置source,检测是否可以连接;
b.从source出发找到一个基础表,进入sql编辑页面;
c.找到需要进行join的下一张表,选择需要进行join的字段以及join类型,支持innerjoin,leftouterjoin,rightouterjoin和fullouterjoin;
d.选择需要排序的列,并进行设置,可以对多列进行组合降序和升序;
e.选择需要分组的列,并对这些列选择度量列和度量函数,比如sum,count,avg,max,min等;
f.选择需要返回的列,去掉不需要返回的列,可以对返回的列进行转换、过滤等处理;
g.预执行sql语句;
h.分析sql执行计划,通过sql执行计划,分析查询是否按照预期的计划执行,最重要检查是否产生了全表扫描;
i.如果产生了全表扫描,检查一下sql,对sql进行调整,直到能够将filter进行下推或者达到预期的效果。
元数据更新模块,用于定制开发元数据的更新;
sql加速器模块,用于对sql进行最优化处理时进行加速生效,具体包括如下步骤:
a.配置source,检测是否可以连接
b.从source出发找到一个基础表,进入表settings页面;
c.开启raw原生加速器和aggregation聚合加速器;
d.如果sql语法不正确或者sql的表和索引列不存在,返回sql异常;
e.编写sql语句,预执行;
f.查看执行计划是否用到刚刚设置的加速器;
g.加速器也可以设置刷新策略,加速器需要加载完原始数据并定期刷新;
h.其他使用到该表的sql会尽量命中加速器获取本地获取数据且无需远程访问sourc。
查询接口模块,用于保障dremio的稳定运行,具体包括如下步骤:
a.给选择出的最优sql配置一个sqlid和sql模板;
b.sql模板会预留sql参数;
c.用户通过sqlid和参数调用查询接口;
d.查询接口使用模板生成dremio的sql;
e.通过dremio的jdbc驱动,查询sql;
f.将查询结果返回给用户。
所述元数据更新模块包括实时更新元数据、手动更新元数据、触发更新元数据和source定期自动更新元数据4种模式:
a.实时更新元数据,对于mysql、oracle等rdbms通过binlog方式获取元数据更新,并及时调用dremio相应表的schema同步api;
b.定时更新元数据,对于无法通过binlog方式获取元数据更新的nosql数据库,可以通过定时器,定时调用dremio相应source的schema同步api;
c.手动更新元数据,对于当前有延迟的元数据,可以执行手动更新的方式同步dremio相应表或者source的schema;
d.触发更新元数据,对于需要元数据更新dremio立即同步schema的情况,可以在代码中调用dremio同步schema的api即可;
e.source定期自动更新元数据,dremio对每个source可以定期自动更新元数据,在配置source时进行设置,一般都是小时级别同步策略,也可以更加业务进行合适的调整。
一种基于dremio实现跨数据源分布式查询方法,包括如下步骤:
(1)、搭建dremio集群,同一个配置多个不同的source;
(2)、预执行sql并查看执行计划,对sql进行优化并配合可视化执行计划调整sql;
(3)、选择出最优化sql,编写sql模板并绑定sqlid;
(4)、执行sqlid和sql参数,查询sql并获取结果。
所述一种基于dremio实现跨数据源分布式查询系统在构建过程中,还包括准备步骤和辅助步骤:
准备步骤:
1)需要事先配置不同的source(csv/json文件、关系数据库、nosql集群等);
2)需要事先对sql进行预编译,确保sql是正确可执行的。
辅助步骤:
需要同步元数据,针对不同的source实时获取元数据的变更信息并进行更新。
只需要通过dremio接入所需要的数据源,可以是相同的或者不同的数据库集群,也支持nosql和rdbms,最重要的是不同类型的数据源对于dremio来说,都是同样的身份source,dremio以plugin的方式接入不同类型的数据库集群。dremio还可以对一些常用sql视图进行本地持久化,对于基于该视图的分布式查询分析的提速有不错的效果。
本发明使用dremio以支持不同跨数据源分布式查询,对于数据分散在不同类型数据库、海量数据分布的场景,剪掉数据的etl过程,同时提升了数据的实时性和吞吐量,可以定制化开发sql以满足更多的业务需求。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。