您的当前位置:首页正文

connector-x | 让数据从DB高速导入到DataFrame中

2024-12-12 来源:个人技术集锦

ConnectorX 使您能够以最快和最节省内存的方式将数据从数据库加载到 Python 中。

你需要的是一行代码:

import connectorx as cx

cx.read_sql("postgresql://username:password@server:port/database", "SELECT * FROM lineitem")

或者,您可以通过指定**分区字段(列)**来使用并行性加速数据加载。

import connectorx as cx

cx.read_sql("postgresql://username:password@server:port/database", "SELECT * FROM lineitem", partition_on="l_orderkey", partition_num=10)

该函数将通过将**指定字段(列)**平均拆分为分区数量来对查询进行分区。ConnectorX 将为每个分区分配一个线程来并行加载和写入数据。目前,我们支持对 SPJA 查询的整数列进行分区。


安装

命令行执行

pip install connectorx

性能表现

我们比对了modin、pandas、dask和connectorX中的read_sql函数,实验文件8.6G,4核电脑并行读取。读取速度和内存占用表现如下图

从两方面看,connectorX以弱三分之一的内存占用和21倍的读取速度遥遥领先于其他几个数据读取库。


支持的数据库

  • [x] Postgres

  • [x] Mysql

  • [x] Sqlite

  • [x] Redshift(通过postgres协议)

  • [x] Clickhouse(通过Mysql协议)

  • [x] SQL Server

  • [ ] Oracle

  • [ ] ...


API参数

connectorx.read_sql(conn: str, 
                    query: Union[List[str], str], 
                    *, 
                    return_type: str = "pandas", 
                    protocol: str = "binary", 
                    partition_on: Optional[str] = None, 
                    partition_num: Optional[int] = None)

  • conn: str: 统一资源端口,支持的URI格式例如: (postgres|postgressql|mysql|mssql|sqlite)://username:password@addr:port/dbname.

  • query: Union[str, List[str]]: 为获取数据资源,支持传入单个SQL查询或者SQL查询列表

  • return_type: str = "pandas":  connectorx.read_sql操作返回的数据类型,默认pandas;此参数共支持 pandas, arrow, pandas, modin, dask or polars.

  • protocol: str = "binary": 协议默认支持文件以二进制导入数据

  • partition_on: Optional[str]: 可选,根据某字段(列)对数据进行分区。

  • partition_num: Optioinal[int]: 可选,线程数

使用案例

  • 从SQL文件中以单线程读取,读取结果以dataframe格式返回

    import connectorx as cx
    
    postgres_url = "postgresql://username:password@server:port/database"
    query = "SELECT * FROM lineitem"
    
    cx.read_sql(postgres_url, query)
    

  • 根据字段l_orderkey自动分区,以10线程读取SQL,读取结果以dataframe格式返回

    import connectorx as cx
    
    postgres_url = "postgresql://username:password@server:port/database"
    query = "SELECT * FROM lineitem"
    
    cx.read_sql(postgres_url, 
                query, 
                partition_on="l_orderkey", 
                partition_num=10)
    

  • 更多内容可查看https://github.com/sfu-db/connector-x

开学特惠| Python网络爬虫与文本分析
近期文章
腾讯课堂 | Python网络爬虫与文本分析

中文金融情感词典发布啦 | 附代码

B站视频 | Python自动化办公
wordexpansion包 | 新增词向量法构建领域词典

语法最简单的微博通用爬虫weibo_crawler
hiResearch 定义自己的科研首页

大邓github汇总, 觉得有用记得star
whatlies包 | 简单玩转词向量可视化

multistop ~ 多语言停用词库
Jaal 库 轻松绘制动态社交网络关系图
SciencePlots | 科研样式绘图库
使用streamlit上线中文文本分析网站
爬虫实战 | 采集&可视化知乎问题的回答
Clumper | dplyr式的Python数据操作包

Clumper库 | 常用的数据操作函数

Clumper库 | Groupby具体案例用法

Clumper库 | 其他数据分析

plydata库 | 数据操作管道操作符>>
plotnine: Python版的ggplot2作图库
读完本文你就了解什么是文本分析

文本分析在经管领域中的应用概述  
综述:文本分析在市场营销研究中的应用

plotnine: Python版的ggplot2作图库
Wow~70G上市公司定期报告数据集

漂亮~pandas可以无缝衔接Bokeh  
YelpDaset: 酒店管理类数据集10+G
显示全文