什么是从SQL Server中的表中提取1 TB数据到没有hadoop

时间:2017-11-03 12:52:36

标签: sql-server performance pandas streaming parquet

我需要从SQL Server数据库中提取2个表到Apache Parquet中的文件(我不使用Hadoop,只使用镶木地板文件)。我所知道的选项是:

  1. 将数据加载到Pandas中的数据框并保存到镶木地板文件中。但是,这种方法不会将数据从SQL Server流式传输到Parquet,而且我只有6 GB的RAM内存。

  2. 使用TurboODBC查询SQL Server,动态将数据转换为Apache Arrow,然后转换为Parquet。与上述相同的问题,TurboODBC目前不会流式传输。

  3. 是否存在可以轻松“快速”从SQL Server中的表中将1 TB数据提取到镶木地板文件的工具或库?

2 个答案:

答案 0 :(得分:5)

您正在寻找的缺失功能是使用Turbodbc中的Apache Arrow而不是整个表批量检索结果:https://github.com/blue-yonder/turbodbc/issues/133您可以帮助实现此功能或使用{{ 1}}同时以分块的方式检索结果。

一般情况下,我建议您不要将数据导出为一个大的Parquet文件,但是要将它们作为更小的Parquet文件导出,这样可以更轻松地使用它们。大多数可以使用Parquet的所有引擎/工件都能够将多个文件作为一个大数据集处理。然后,您还可以将查询拆分为多个并行写出Parquet文件的查询。如果将导出限制为小于总内存的块,则还应该能够使用fetchnumpybatches一次写入Parquet。

答案 1 :(得分:0)

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

  • 利用 odbc 批量查询从 SQL Server 快速检索数据(如 turbodbc)。
  • 一次只在内存中保存一批,所以你可以写 parquet 大于系统内存的文件。
  • 允许您根据需要将结果拆分为多个文件。

完全公开,我是作者,所以我可能对这个工具有偏见。