一种加快数据从openGauss加载到DataFrame的方法技术

技术编号:36694135 阅读:13 留言:0更新日期:2023-02-27 20:04
本发明专利技术公开了一种加快数据从openGauss加载到DataFrame的方法,涉及计算机数据处理技术领域。该方法通过传入连接字段conn、SQL查询语句query,以及匹配openGauss的protocol字段,使本地计算机通过ConnectorX连接至openGauss数据库管理系统;ConnectorX的工作流包括:根据SQL查询语句query从openGauss获取元数据;根据元数据类型进行源分区,并预先分配内存创建若干NumPy数组;将SQL查询语句query拆分若干个子查询并行执行,得到多个查询结果;将查询结果转换为待写的查询结果数据;将待写的查询结果数据写入NumPy数组并生成DataFrame。本发明专利技术方法显著提高了openGauss将数据读取到DataFrame的速度,此外,通过使用ConnectorX来优化读取数据的过程,避免了修改数据库服务器和客户端驱动程序。数据库服务器和客户端驱动程序。数据库服务器和客户端驱动程序。

【技术实现步骤摘要】
一种加快数据从openGauss加载到DataFrame的方法


[0001]本专利技术涉及计算机数据处理
,具体而言,涉及一种加快数据从openGauss加载到DataFrame的方法。

技术介绍

[0002]数据通常存储在数据库管理系统(DBMS)中,但DataFrame(数据帧)库在数据科学家中得到广泛使用。一个重要但具有挑战性的问题是如何弥补数据库和DataFrame之间的差距。
[0003]例如Pandas、Dask和Modin(均为常见的Python第三方库)等DataFrame库被广泛的使用于数据操作和数据分析中。一般情况下,企业环境会将其数据存储在数据库管理系统中,因此,大多数数据科学分析软件第一步都是从DBMS中加载数据。但是这个数据加载过程不仅是出了名的缓慢,而且还消耗了大量的客户端内存,这很容易导致内存不足或性能下降的问题。这个问题是亟待解决的,因为读取数据这个操作处于很多数据科学任务的关键路径上,而且在某些真实的机器学习管道中,它可能消耗超过50%的时间。因此,弥补数据库和DataFrame之间的差距是学术界和工业界面临的重要问题。
[0004]为了解决这个问题,现有的方法可以从两个方面概括:
[0005]一是服务器端增强,通过元组级协议从数据库系统访问数据是出了名的慢。之前的工作表明现有的有线协议受到冗余信息和昂贵的(反)序列化的影响,因此需要提出了一个新的协议来解决这些问题。更多的方法倾向于使用现有的数据格式(如Parquet,ORC(两种列式存储格式)等)通过避免元组级的访问来加快这个过程。除此之外,并行性是另一种加速数据传输的有效方法。服务器端增强的问题在于都需要用户修改数据库服务器的源代码或者切换到新服务器的源代码,这在现实场景中是不可行的,因为想要支持这些解决方案,就需要提供额外的管理。
[0006]二是客户端优化,机器学习和数据分析工具倾向于采用DataFrame作为数据操作的抽象,其中许多工具通过各种优化工作提供本机DBMS的I/O支持。例如Pandas支持分块,通过一次加载一个数据块来减少内存压力。Modin,Dask,Spark通过客户端查询分区利用多个内核等。但是现有的方法仅限于具有特定接口的客户端驱动程序,且大多都只针对特定的一个或几个DataFrame,因此具有很大的局限性。
[0007]此外,openGauss(一种开源关系型数据库)作为一种常用的数据库也面临着这些问题,现有的连接方案psycopg2(Python的一个第三方库,可以用来连接数据库)和PyGreSQL(同psycopg2)无论是时间消耗还是内存占用都比较大,无法满足更快的读取速度的需求。

技术实现思路

[0008]本专利技术在于提供一种加快数据从openGauss加载到DataFrame的方法,其能够缓解上述问题。
[0009]为了缓解上述的问题,本专利技术采取的技术方案如下:
[0010]本专利技术提供了一种加快数据从openGauss加载到DataFrame的方法,通过传入连接字段conn、SQL查询语句query,以及匹配openGauss的protocol字段,使本地计算机通过ConnectorX连接至openGauss数据库管理系统;
[0011]ConnectorX的工作流包括以下步骤:
[0012]S1、根据SQL查询语句query从openGauss获取元数据;
[0013]S2、根据元数据类型进行源分区,并创建若干NumPy数组;
[0014]S3、将SQL查询语句query拆分若干个子查询并行执行,得到多个查询结果;
[0015]S4、将查询结果转换为待写的查询结果数据;
[0016]S5、将待写的查询结果数据写入NumPy数组并生成DataFrame。
[0017]在本专利技术的一较佳实施方式中,连接字段conn由DBMS类型、用户名、密码、主机号、端口号以及数据库名组成。
[0018]在本专利技术的一较佳实施方式中,protocol字段为cursor字段。
[0019]游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果,每个游标区都有一个名字,用户可以用SQL语句逐一从游标中获取记录,交由主语言进一步处理。
[0020]在本专利技术的一较佳实施方式中,ConnectorX包括依次数据连接的源模块、类型映射连接模块和目标模块,所述源模块包括openGauss。
[0021]源模块的代码定义了CX连接至DBMS的方法,这里在源模块中添加新的DBMS,即opeGauss。现有技术的源模块支持连接MySQL,PostgreSQL等数据库,不支持连接openGauss数据库,本专利技术通过对源模块中代码匹配的部分进行重写,加入了openGauss这个选项,使的connectorx可以支持连接openGauss数据库。
[0022]数据库中的数据按建表时的规定格式存储,被查询后按该格式输出;传入CX后根据数据库不同选择对应的rust宏定义,再将数据转换成规定格式(由于各数据库格式上并不统一,此步骤能统一待写数据的格式,简化预分配内存的操作);再将统一格式后的数据写入预分配的Numpy数组中,最后转换为pandas.dataFrame。
[0023]将openGauss作为源模块,相当于扩展了connectorx可以连接的数据库种类,在代码中,首先新增了openGauss这一个选项,Connectorx发现用户请求连接的是openGauss数据库后,会调用专用的openGauss的连接方法,也就是上面叙述的新的连接字段和连接协议,通过这种方法,完成connectorx和openGauss的连接。
[0024]在本专利技术的一较佳实施方式中,当connectorX检测到openGauss的输入时,匹配至连接字段conn,并调用匹配openGauss的protocol字段,以实现根据SQL查询语句query从openGauss获取元数据。
[0025]在本专利技术的一较佳实施方式中,类型映射连接模块用于根据查询结果数据类型及Rust宏定义,将查询结果转换为待写的查询结果数据。
[0026]在本专利技术的一较佳实施方式中,目标模块用于将待写的查询结果数据写入NumPy数组并生成DataFrame。
[0027]与现有技术相比,本专利技术的有益效果是:
[0028]与ConnectorX现有的连接方式相比,使用了新的连接字段(conn)和连接协议
(protocol),将ConnectorX适配到了openGauss数据库,显著提高了openGauss将数据读取到DataFrame的速度;
[0029]Pandas可以将数据直接读取为DataFrame,但是在读取大量数据时消耗的时间更长,内存占用更大,而本专利技术通过connectorx读取数据可以减少四分之三的时间消耗和三分之二的内存消耗;
[0030]与op本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种加快数据从openGauss加载到DataFrame的方法,其特征在于,通过传入连接字段conn、SQL查询语句query,以及匹配openGauss的protocol字段,使本地计算机通过ConnectorX连接至openGauss数据库管理系统;ConnectorX的工作流包括以下步骤:S1、根据SQL查询语句query从openGauss获取元数据;S2、根据元数据类型进行源分区,并创建若干NumPy数组;S3、将SQL查询语句query拆分若干个子查询并行执行,得到多个查询结果;S4、将查询结果转换为待写的查询结果数据;S5、将待写的查询结果数据写入NumPy数组并生成DataFrame。2.根据权利要求1所述加快数据从openGauss加载到DataFrame的方法,其特征在于,连接字段conn由DBMS类型、用户名、密码、主机号、端口号以及数据库名组成。3.根据权利要求2所述加快数据从openGauss加载到DataFrame的方法,其特征在于,protoco...

【专利技术属性】
技术研发人员:袁泽文彭志昊刘宇驰苏涵郑凯曾凯
申请(专利权)人:电子科技大学长三角研究院衢州
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1