我需要从 SQL Server 数据库中提取 2 个表到 Apache Parquet 中的文件(我不使用 Hadoop,只使用 parquet 文件)。我知道的选项是:
将数据加载到 Pandas 中的数据框并保存到 parquet 文件。但是,这种方法不会将数据从 SQL Server 流式传输到 Parquet,而且我只有 6 GB 的 RAM 内存。
使用 TurboODBC查询 SQL Server,将数据动态转换为 Apache Arrow,然后再转换为 Parquet。与上述相同的问题,TurboODBC 当前不流式传输。
是否存在可以轻松“快速”将 SQL Server 表中的 1 TB 数据提取到 parquet 文件的工具或库?
最佳答案
您正在寻找的缺失功能是在 Turbodbc 中使用 Apache Arrow 分批检索结果,而不是一次检索整个表:https://github.com/blue-yonder/turbodbc/issues/133您可以帮助实现此功能,也可以同时使用 fetchnumpybatches
以分块方式检索结果。
一般来说,我建议您不要将数据导出为一个大的 Parquet 文件,而是尽可能多地导出较小的文件,这样使用它们会容易得多。大多数情况下,所有可以使用 Parquet 的引擎/工件都能够将多个文件作为一个大数据集来处理。然后,您还可以将查询拆分为多个并行写出 Parquet 文件的查询。如果您将导出限制为小于总主内存的 block ,您还应该能够使用 fetchallarrow
立即写入 Parquet。
关于sql-server - 在没有 hadoop 的情况下,从 SQL Server 中的表中将 1 TB 数据提取到 Parquet 文件的更快方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47096286/