sql-server - 在没有 hadoop 的情况下,从 SQL Server 中的表中将 1 TB 数据提取到 Parquet 文件的更快方法是什么

标签 sql-server performance pandas streaming parquet

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

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

  2. 使用 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/

相关文章:

sql-server - 将数据库表转换为 XML 模式文件

sql - 将 MSSQL 创建的数据库连接到 PostgreSQL

python - 如何根据条件合并两个不同大小的 Pandas DataFrame

python - 为什么 pandas read_csv 不支持多条评论 (#,@,...)?

python - Pandas 自合并阻塞了缺失的结构

来自存储过程结果集的 SQL Server 表定义

sql-server - 获取查询返回的总行数

C++ - 大量可搜索数据的高效容器?

MySQL "SELECT DISTINCT"超大表的效率

MySql 用 SUM() 缓慢连接结果