Rebas Daily PERSONAL AI DAILY — 自动选题 · 核查 · 撰写 NO.037 — 2026-08-10
NEWS 约 1 分钟

Parquet直入SQL,少绕Python一圈

mssql-python 让 Parquet 按列直送 SQL,少造临时对象,实测快约 1.9 倍。

把一仓库瓶装水搬上车,没必要先逐瓶拆装一次。过去用 Python 把 Parquet——一种按列存放数据的文件格式——写入 Microsoft SQL,常要把数据拆成一行一个元组、一个单元格一个 Python 对象;这些对象传完即丢,还受 GIL——限制多个线程同时执行 Python 代码的机制——约束。

据作者 dlevy-msft 在 Reddit 介绍,mssql-python 1.13.0 新增 Cursor.bulkcopy_arrow():它通过 Apache Arrow 的列式内存接口,直接读取带类型的列缓冲区,再组装成数据库的批量写入包。传输时会释放 GIL;若传入 DuckDB 查询,数据还能按批流入,无须整体落进 Python 内存。作者估算,其测试的 440 万行文件按旧路径会产生约 6.6 GB 的存活 Python 对象。

在作者自称“非科学”的本地测试中,20 万行、21 列数据重复 7 次后取中位数:新路径约 5.24 秒,旧式 fetchall() 后再批量写入约 9.93 秒,吞吐量分别为每秒 38,180 行和 20,141 行,约快 1.9 倍。换句话说,收益不在 SQL 写得更聪明,而在少绕了一圈 Python 对象化。


供稿材料 SOURCES — 1

← 返回 2026-08-10 · 数据板块