3

我遇到了一个问题,不确定哪种技术最适合实施它。如果你们能根据你的经验给我一些建议,我将不胜感激。我想从 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 数据相对应的一组不同的临时表,然后编写存储过程以从这组新的临时表中加载实际的临时表(考虑到对我现有框架的更改量,我想避免的路径它需要)。

提前致谢。如果有人能指出我正确的方向或从他/她的个人经历中给我一些见解,这将有助于我做出明智的决定。

问候,-v-

PS:CSV 文件相当简单,每个大约 40 列。对象的深度或文件之间的关系将在 2 到 3 左右。

4

3 回答 3

2

除非您可以使用一些成熟的 ETL 工具(例如 Informatica PowerCenter、Pentaho 数据集成),否则我建议使用第 4 种解决方案 - 它简单且性能应该不错,因为 Oracle 将处理任务中最复杂的部分。

于 2012-10-25T06:22:19.670 回答
2

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

于 2013-01-12T21:56:34.263 回答
1

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

于 2013-01-21T23:24:41.190 回答