【发布时间】: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