选择将大型CSV文件加载到Oracle表的技术

时间:2012-10-25 04:54:52

标签: python csv etl sql-loader smooks

我遇到了一个问题,我不确定哪种方法最适合实施它。如果你们可以根据你的经验建议我,那将是有责任的。 我想从10-15个CSV文件加载数据,每个文件都是相当大的5-10 GB。通过加载数据,我的意思是将CSV文件转换为XML,然后使用此XML在Oracle中填充大约6-7个停顿表。 需要填充数据,以便XML的元素以及最终表的行来自多个CSV文件。因此对于例如元素A将具有来自CSV文件1,文件2和文件3等的子元素。

我有一个基于Apache Camel,Linux上的Jboss构建的框架。 Oracle 10G是数据库服务器。 我正在考虑的选项,

  1. Smooks - 然而问题是Smooks一次序列化一个CSV并且我不能保持半烤java bean直到读取其他CSV文件,因为我冒着内存耗尽的风险在完全填充之前我需要创建和保留的bean数量,以XML格式写入磁盘。
  2. SQLLoader - 我可以一起跳过XML创建,并使用SQLLoader将CSV直接加载到登台表。但我不确定我是否可以。将SQL Loader中的多个CSV文件加载到更新第一个文件后的记录的相同表中。湾在加载临时表时应用一些转换规则。
  3. 用于将CSV转换为XML的Python脚本。
  4. SQLLoader,用于加载与CSV数据对应的一组不同的登台表,然后编写存储过程,从这组新的登台表加载实际的登台表(考虑到我的更改量,我希望避免这样的路径)它需要的现有框架。
  5. 提前致谢。如果有人可以指出我正确的方向或从他/她的个人经历中给我一些见解,这将有助于我做出明智的决定。

    的问候, -v -

    PS:CSV文件非常简单,每个文件大约有40列。对象的深度或文件之间的关系大约为2到3个。

3 个答案:

答案 0 :(得分:2)

除非您可以使用一些完整的ETL工具(例如Informatica PowerCenter,Pentaho Data Integration),否则我建议使用第四种解决方案 - 它很简单且性能应该很好,因为Oracle将处理任务中最复杂的部分

答案 1 :(得分:2)

在Informatica PowerCenter中,您可以导入/导出XML + 5GB ..作为Marek响应,尝试它因为工作速度非常快。here是一个简短的介绍,如果您不熟悉这个工具。

答案 2 :(得分:1)

创建一个进程/脚本,它将调用一个过程将csv文件加载到外部Oracle表,另一个脚本将其加载到目标表。
您还可以添加cron作业来调用这些脚本,这些脚本将跟踪传入的csv文件到目录中,处理它并将csv文件移动到输出/处理过的文件夹。
也可以通过记录或发送电子邮件来相应地处理例外情况。祝你好运。