【问题标题】:Transferring Millions of rows from teradata to mySQL将数百万行从 teradata 传输到 mySQL
【发布时间】:2013-12-23 05:37:17
【问题描述】:

我必须将大约 500 万行数据从 Teradata 传输到 MySQL。谁能建议我在不使用文件系统的情况下通过网络执行此操作的最快方法。我是 Teradata 和 MySQL 的新手。我想每周将此传输作为批处理作业运行,因此我正在寻找可以完全自动化的解决方案。任何建议或提示将不胜感激。

我已经编写了代码,使用 JDBC 从 Teradata 获取记录并将它们插入 MySQL。但它非常慢,所以我希望使该代码更有效率。我保持通用是因为我没有受我的实现限制的解决方案,以及使现有代码更高效的同时,我也对其他替代方案持开放态度。但我不想使用文件系统,因为维护或更新脚本并不容易。

我的实现:

从 teradata 获取记录:

connection  =   DBConnectionFactory.getDBConnection(SOURCE_DB);

    statement = connection.createStatement();
    rs = statement.executeQuery(QUERY_SELECT);
    while (rs.next()) {

        Offer offer = new Offer();
        offer.setExternalSourceId(rs.getString("EXT_SOURCE_ID"));
        offer.setClientOfferId(rs.getString("CLIENT_OFFER_ID"));
        offer.setUpcId(rs.getString("UPC_ID"));

        offers.add(offer);
    }

在 mySQL 中插入记录:

int count = 0;
    if (isUpdated) {
        for (Offer offer : offers) {

            count++;

            stringBuilderUpdate = new StringBuilder();
            stringBuilderUpdate = stringBuilderUpdate
                    .append(QUERY_INSERT);

            stringBuilderUpdate = stringBuilderUpdate.append("'"
                    + offer.getExternalSourceId() + "'");

            statement.addBatch(stringBuilderUpdate.toString());

            queryBuilder = queryBuilder.append(stringBuilderUpdate
                    .toString() + SEMI_COLON);

            if (count > LIMIT) {
                countUpdate = statement.executeBatch();
                LOG.info("DB update count : " + countUpdate.length);
                count = 0;
            }

        }
        if (count > 0) {
            // Execute batch
            countUpdate = statement.executeBatch();
        }

谁能告诉我我们是否可以让这段代码更高效???

谢谢

PS:请忽略以上代码中的语法错误,因为此代码运行正常。由于复制和粘贴,某些信息可能会丢失。

【问题讨论】:

  • 你最后是怎么完成这个任务的?

标签: java mysql sql bigdata teradata


【解决方案1】:

fastest 将数据导入 MySQL 的方法是使用LOAD DATA INFILEmysqlimport,这是LOAD DATA INFILE 的命令行接口,它涉及从文件加载数据,最好位于本地文件系统上。

从文本文件加载表时,使用 LOAD DATA INFILE。这是 通常比使用 INSERT 语句快 20 倍

因此,尽管您不想使用文件系统,但我还是建议您考虑创建文件转储,将其传输到 MySQL 服务器并使用上述方法加载数据。

所有这些任务都可以通过脚本完全自动化。

【讨论】:

  • 另外,当向表中添加大量数据时,删除所有索引会更快。执行批量插入,然后重新创建索引。当插入的数据占总数据的 50% 以上时,情况可能更是如此。
猜你喜欢
  • 2015-04-28
  • 2014-12-25
  • 2012-03-04
  • 2018-12-04
  • 2010-11-22
  • 1970-01-01
  • 2016-02-15
  • 2021-12-27
  • 1970-01-01
相关资源
最近更新 更多