【问题标题】:ETL to load large excel into Oracle DBETL 将大型 excel 加载到 Oracle 数据库中
【发布时间】:2016-10-20 16:19:31
【问题描述】:

我的要求是将放置在文件服务器上的大型 excel 文件 [包含超过 160k 行数据和大约 150 列] 加载到 oracle DB 表中。但它有一些限制 -

  1. 两列的位置[让我们说“EmpID”和“AcctNum”] 在 Excel 上可能会有所不同 - 就像有时“EmpID”可能出现在“A”列但也可能出现在“E”列其他时间。因此数据映射必须是动态的。

  2. 文件可以在一天中的任何时间出现,并且应该在文件服务器中创建后一小时内处理,并且一天可以出现多个文件。因此我必须在 oracle 中创建一些 Batch [比如通过 SQL 服务器作业运行 dtsx]。

要运行批处理的操作系统是 Unix。

  1. 性能必须是这里的关键挑战,因此请将其作为性能有效的标准。

请告知我们如何做到这一点[最好使用免费软件/开源工具]

感谢和问候, 阿尔卡

【问题讨论】:

  • 首先,您需要将该 Excel 文件标准化为 csv 格式,并为每一行提供正确的值....然后您可以按照以下步骤将批量插入到您的数据库中 stackoverflow.com/questions/22241428/oracle-bulk-import
  • 我建议使用Apache POI处理Excel文件,然后实现你的业务逻辑找到对应的数据到数据库表列,并使用JDBC插入数据到数据库。
  • 您可能还想查看这个相关问题:stackoverflow.com/questions/120001/…
  • 整个文件是否具有相同的布局,或者整个文件的布局是否不同?无论文件具有同质或异构布局,您如何确定从中定位数据的正确列?它们的列标题或其他特殊记录是在同类文件的顶部还是在异类文件更改格式时?
  • 第一行将是标题。

标签: java excel oracle etl database-administration


【解决方案1】:

我个人会编写一个 Java 程序,然后可以由 Unix shell 脚本调用。 Java 程序会很简单:

  • 打开一个尝试块
  • 在自动提交错误时打开数据库连接
  • 创建准备好的语句
  • 逐行读取文件
  • 对于每一行,
  • 标记其字段
    • 在这里你必须聪明才能处理你的动态字段,当然必须有一个规则
  • 将值放入准备好的语句中
  • 执行它
  • 到达文件末尾
  • 提交
  • 关闭尝试并打开 finally 块
  • 回滚

自动提交为 true 会加快执行速度。

【讨论】:

  • 需求被推迟。因此从来没有机会做 POC。但是,非常感谢您的 cmets。只要我有机会就会努力。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多