【问题标题】:What is the fastest way to generate a CSV file from Oracle Database tables?从 Oracle 数据库表生成 CSV 文件的最快方法是什么?
【发布时间】:2025-12-30 14:30:06
【问题描述】:

我在 oracle 数据库中有一个表,其中包含大约 5GB 大小的大约 7 亿条记录。我必须每天运行一项工作以将 oracle 表复制到雪花。由于雪花中没有直接连接到 oracle 数据库的连接器,因此我必须首先从 oracle 数据库中提取数据到 csv 文件,然后使用 python 脚本将该 csv 文件上传到雪花。我尝试使用 sqlplus 将数据提取到 csv。但是 sqlplus 需要很长时间才能提取数据。所以我的问题是: 1.从oracle数据库中提取数据最快的方法是什么? 2.由于我每天都要运行一个工作来更新这个oracle表为雪花,有没有其他方法可以完成这个任务?

感谢任何帮助。

【问题讨论】:

  • 你真的想将 7 亿条记录写入 CSV 文件吗?
  • CSV 文件只是我想的一个界面。我的主要议程是将那 7 百万条记录写入雪花。我的 oracle 表每天都会更新,我也必须每天在雪花中更新它?
  • 我认为 csv 可能是执行此任务的一种解决方案,因为雪花没有直接连接到 oracle 数据库
  • 你看过类似this的东西吗?
  • 就个人而言,我会考虑使用带有两个连接器的 Python。打开与两个数据库的连接并避免写入中间磁盘。使用适当的调优,例如cx-oracle.readthedocs.io/en/latest/user_guide/…

标签: oracle snowflake-cloud-data-platform


【解决方案1】:

您尝试过 SQLCLI 吗?它支持 CSV 格式的假脱机。请检查示例脚本:

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9536328100346697722

您可以从以下地址下载:https://www.oracle.com/database/technologies/appdev/sqlcl.html

获取 CSV 后,您可以使用 Snowflake 的 COPY 命令提取数据(而不是使用 Python 脚本):

https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html

当然,还有其他方法。例如,您可以使用 Spark,或者可以连接 Oracle 和 Snowflake 的 ETL 工具(例如 Talend)。

这个展示了如何使用 Talend 从 MySQL 迁移到 Snowflake,但这个想法对于 Oracle 是一样的:

https://www.talend.com/resources/migrate-cloud-database-snowflake/

据我所知,cmets中也有关于金门的好推荐。

【讨论】:

【解决方案2】:

从源系统中提取 700M 记录需要一些时间,我对历史加载的建议是使用任何 ETL 工具或 Sqoop 从源系统中提取数据。

  • 如果您使用任何 ETL 工具,您可以使用 JDBC 或 ODBC 驱动程序连接雪花,这会将您的数据从 Oracle 推送到雪花。
  • 如果有 hadoop,您可以使用 sqoop 提取数据,然后使用 COPY INTO 命令将数据推送到雪花。

【讨论】:

  • 如果我使用任何 ETL 工具,所花费的时间会减少大约 3-4 小时。
  • 它取决于表中的列数和每列的数据类型。首先尝试使用一两百万条记录来查看性能,然后您将了解提取所有数据所需的总时间。
  • 哪种 ETL 工具会快速或高效?