我需要从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 文件中?
3条答案
按热度按时间gupuwyp21#
您正在寻找的功能是在Turbodbc中使用Apache Arrow批量检索结果,而不是一次检索整个表:https://github.com/blue-yonder/turbodbc/issues/133您可以帮助实现此功能,也可以同时使用
fetchnumpybatches
以分块的方式检索结果。一般来说,我建议您不要将数据导出为一个大的Parquet文件,而是导出为许多较小的文件,这将使使用它们更容易。大多数情况下,所有可以使用Parquet的引擎/工件都能够将多个文件作为一个大数据集处理。然后,您还可以将查询拆分为多个查询,并行写出Parquet文件。如果您将导出限制为小于总主内存的块,那么您也应该能够使用
fetchallarrow
立即写入Parquet。vcirk6k62#
我认为odbc2parquet命令行实用程序可能是您正在寻找的。
完全披露,我是作者,所以我可能会偏向于工具。
bgtovc5b3#
您可以尝试在此处查看Microsoft的powershell脚本。
Powershell脚本使用Parquet.NET或ParquetSharp。非常快,可以与许多表一起工作。没有主动维护,但您可以根据需要调整源代码。
https://github.com/microsoft/AzureSynapseScriptsAndAccelerators/tree/main/Migration/SQLServer/2B_ExportSourceDataToParquet