pandas 在不使用Hadoop的情况下,从SQL Server中的表提取1TB数据到Parquet文件的更快方法是什么

q7solyqu  于 2023-05-05  发布在  Hadoop
关注(0)|答案(3)|浏览(256)

我需要从SQL Server数据库中提取2个表到Apache Parquet中的文件(我不使用Hadoop,只使用Parquet文件)。我知道的选择是:
1.将数据加载到Pandas中的dataframe并保存到parquet文件。但是,这种方法不会将数据从SQL Server流到Parquet,而且我只有6 GB的RAM内存。
1.使用TurboODBC查询SQL Server,将数据动态转换为Apache Arrow,然后转换为Parquet。与上面的问题相同,TurboODBC当前不流式传输。
是否存在一种工具或库,可以轻松、“快速”地将SQL Server中的表中的1TB数据提取到 parquet 文件中?

gupuwyp2

gupuwyp21#

您正在寻找的功能是在Turbodbc中使用Apache Arrow批量检索结果,而不是一次检索整个表:https://github.com/blue-yonder/turbodbc/issues/133您可以帮助实现此功能,也可以同时使用fetchnumpybatches以分块的方式检索结果。
一般来说,我建议您不要将数据导出为一个大的Parquet文件,而是导出为许多较小的文件,这将使使用它们更容易。大多数情况下,所有可以使用Parquet的引擎/工件都能够将多个文件作为一个大数据集处理。然后,您还可以将查询拆分为多个查询,并行写出Parquet文件。如果您将导出限制为小于总主内存的块,那么您也应该能够使用fetchallarrow立即写入Parquet。

vcirk6k6

vcirk6k62#

我认为odbc2parquet命令行实用程序可能是您正在寻找的。

  • 利用odbc批量查询从SQL Server快速检索数据(如turbodbc)。
  • 它一次只在内存中保留一个批处理,因此您可以写入比系统内存更大的Parquet文件。
  • 允许您根据需要将结果拆分为多个文件。

完全披露,我是作者,所以我可能会偏向于工具。

bgtovc5b

bgtovc5b3#

您可以尝试在此处查看Microsoft的powershell脚本。
Powershell脚本使用Parquet.NET或ParquetSharp。非常快,可以与许多表一起工作。没有主动维护,但您可以根据需要调整源代码。
https://github.com/microsoft/AzureSynapseScriptsAndAccelerators/tree/main/Migration/SQLServer/2B_ExportSourceDataToParquet

.\Export-ToParquet.ps1 -ConfigFile .\ConfigFile.csv -ServerName "test_sql_server_instance" -UserName sqladminuser -MaxJobsCount 5

相关问题