【问题标题】:Copy a million record from excel to database将一百万条记录从excel复制到数据库
【发布时间】:2018-04-22 21:11:11
【问题描述】:

我的 excel 工作表 中有 100 万 条记录,我想以最快的方式将这些记录复制到 oracle 数据库中。 p>

我知道两种方法,一种使用 Batch,另一种使用 SQLBulkcopy

除了这两种方法之外,还有什么最快的方法吗?

我还需要创建一个log file,其中包含在执行操作时未插入的记录的详细信息。

【问题讨论】:

  • 如果您想要尽可能快的方法,那么这不应该是 Java / JDBC 问题。您的标记隐含地限制您使用 Java / JDBC 解决方案。
  • 将其转换为 CSV 并使用 SQL* 加载程序加载。我敢打赌,它很快。
  • @KaushikNayak 的这条评论最快,不需要“复制”,只需使用 oracle 直接打开 csv 文件...

标签: sql excel database oracle


【解决方案1】:

最快的方法是将 excel 文件类型设置为 CSV,将所有列与表头匹配,然后手动将 CSV 导入到表中。

【讨论】:

  • 在导入前删除索引/导入后重新创建它们。
【解决方案2】:

在远程服务器上加载逗号分隔文件的最快方法是通过 sql*ldr 使用直接路径加载。如果在同一台服务器上,您也可以使用外部表。

我建议您使用 2 个步骤加载.. 首先按照 blog 创建一个 sql*ldr 加载脚本。 然后在oracle客户端运行生成的脚本.. 如果表没有日志记录,那么在执行脚本之前添加附加命令将使其更快..

话虽如此,一百万行对于 oracle 来说太小了,如果表没有大量索引,则应该能够在一分钟内加载..

您可以通过并行加载来更快地加载,但对于一百万行来说,这太过分了。

【讨论】:

    【解决方案3】:

    您可以使用任何 Excel 解析库,例如 apache-poi 它使您能够阅读 excel 电子表格。

    只需存储每一行​​和每一列,以及您需要的任何其他数据。 然后,将所有这些数据传输到您希望在其上查看的服务器/位置。

    使用这个库的我的一个程序的示例源代码:

    public boolean read() {
        for (final int sheet : sheets()) {
            final Sheet result = workbook.getSheetAt(sheet);
            if (result != null) {
                results.addAll(results(result));
            }
        }
        if (results().size() > 0) {
            System.out.println("Creating backup database incase any failures occur...");
            createBackup();
            return true;
        }
        return false;
    }
    
    public boolean open() {
        try {
            results = new HashSet<E>();
            workbook = new HSSFWorkbook(new POIFSFileSystem(new FileInputStream(new File(location()))));
        } catch (IOException e) {
            System.out.println("IOException getting workbook from speadsheet: " + e.getMessage());
        }
        return results != null && workbook != null;
    }
    

    【讨论】:

    • 好的,但这是最快的方法吗?我的意思是,如果我们走这条路线,将整个工作表复制到 db 大约需要多少分钟?
    • 这根本不能真正回答问题。
    • 这实际上并没有回答问题。但是即使代码有些完整,这仍然不是最好的,也绝对不是最快的方法。
    • @ghostrider 不要这样做。将您的 Excel 转换为 CSV,上传到数据库服务器,使用数据库 CSV 工具导入。
    • @ghostrider 没有“或”。 SQL*Loader 属于“数据库 CSV 工具”集。
    猜你喜欢
    • 2011-11-29
    • 2019-10-22
    • 1970-01-01
    • 2017-12-02
    • 2016-03-06
    • 2012-02-21
    • 2020-09-23
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多