在没有 hadoop 的情况下,从 SQL 服务器中的表中提取 1 TB 数据到 Parquet 文件的更快方法是什么

What's is the faster way to extract 1 terabyte of data from tables in SQL Server to Parquet files without hadoop

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

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

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

是否存在可以轻松 "quickly" 从 SQL 服务器中的表中提取 1 TB 数据到 parquet 文件的工具或库?

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

一般来说,我建议您不要将数据导出为一个大的 Parquet 文件,而是尽可能多地导出较小的文件,这样使用它们会容易得多。大多数情况下,所有可以使用 Parquet 的 engines/artifacts 都能够将多个文件作为一个大数据集来处理。然后,您还可以将查询拆分为多个并行写出 Parquet 文件的查询。如果您将导出限制为小于总主内存的块,您还应该能够使用 fetchallarrow 立即写入 Parquet。

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

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

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