内容提要
mssql-python现在支持将SQL Server数据以Apache Arrow结构提取,提升了速度和内存效率。此功能允许在Polars、Pandas等库中无缝操作数据,避免了Python对象创建,降低了内存使用。新增的API包括cursor.arrow_batch、cursor.arrow和cursor.arrow_reader,适用于不同的数据提取需求,尤其在处理时间类型时表现突出。
关键要点
-
mssql-python现在支持将SQL Server数据直接提取为Apache Arrow结构,提升了速度和内存效率。
-
此功能允许在Polars、Pandas等库中无缝操作数据,避免了Python对象创建,降低了内存使用。
-
新增的API包括cursor.arrow_batch、cursor.arrow和cursor.arrow_reader,适用于不同的数据提取需求。
-
在处理时间类型(如DATETIME和DATETIMEOFFSET)时,新的提取路径表现尤为突出,消除了Python端的每值转换。
-
Arrow路径在大多数SQL Server类型的测试中表现出更快的速度,尤其是时间类型。
-
对于API工作负载,Arrow路径在序列化结果为JSON时也能显著提高性能。
-
在Linux上,NVARCHAR的提取时间较长,未来将进行优化以提高性能。
延伸解读
Apache Arrow的优势
Apache Arrow通过零拷贝的内存布局实现了不同编程语言之间的高效数据交换。这种设计使得在处理SQL Server数据时,能够显著提高速度和降低内存使用,尤其是在处理时间类型数据时,避免了Python端的每值转换,提升了整体性能。
API使用注意事项
新增的API如cursor.arrow_batch和cursor.arrow_reader提供了灵活的数据提取方式。用户在选择时应考虑数据量和内存限制,较大的批量可能提高吞吐量,但也会增加峰值内存使用。对于大数据集,推荐使用流式读取以避免内存溢出。
Linux环境下的性能问题
在Linux上,NVARCHAR类型的提取时间较长,主要由于UTF-16到UTF-8的转换效率低下。开发团队已意识到这一问题,并计划在后续版本中进行优化。因此,Linux用户在处理此类数据时需特别关注性能表现。
延伸问答
mssql-python如何提升SQL Server数据提取的效率?
mssql-python通过支持将SQL Server数据直接提取为Apache Arrow结构,避免了Python对象创建,从而提升了速度和内存效率。
新增的API有哪些,分别适用于什么场景?
新增的API包括cursor.arrow_batch、cursor.arrow和cursor.arrow_reader,分别适用于批量提取、一次性提取整个结果集和懒加载读取大结果集。
在处理时间类型数据时,mssql-python的表现如何?
在处理时间类型如DATETIME和DATETIMEOFFSET时,mssql-python的Arrow路径表现突出,消除了Python端的每值转换,显著提高了速度。
使用mssql-python时如何避免内存使用过高?
可以使用cursor.arrow_batch或cursor.arrow_reader来分批提取数据,避免一次性加载整个结果集,从而降低内存使用。
mssql-python在Linux上提取NVARCHAR时有什么问题?
在Linux上,NVARCHAR的提取时间较长,主要由于当前的UTF-16到UTF-8转换路径较慢,未来将进行优化。
如何开始使用mssql-python和Apache Arrow?
可以通过安装或升级mssql-python和pyarrow来开始使用,使用cursor.arrow()替代fetchall()来提取数据。