我正在使用 Teradata jdbc 驱动程序 13.00.00.10,并尝试将具有 1 亿行的平面文件上传到 teradata。
我从一张干净的桌子开始。
首先,我尝试遍历整个文件,对每一行执行 addBatch(),最后只执行一个 executeBatch():
while ((s = reader.readLine())!=null ){
String[] columns = StringUtils.split(s, separator);
for (int j=0; j <columns.length; j++){
st.setString(j+1,columns[j]);
}
st.addBatch();
i++;
if (i % 10000 ==0 ){
ULogger.info(this, "imported " + i + " lines.");
}
}
st.executeBatch();
这很快消耗了我的应用程序的所有内存。
我设置了 9GB XMX,并在大约 4000 万个 addBatch() 之后得到了 OutOfMemory。
然后我尝试定期执行 executeBatch() - 遍历文件,每 2000 万个 addBatch() 执行一次 executeBatch()。
while ((s = reader.readLine())!=null ){
String[] columns = StringUtils.split(s, separator);
for (int j=0; j <columns.length; j++){
st.setString(j+1,columns[j]);
}
st.addBatch();
i++;
if (i % 20000000 ==0 ){
st.executeBatch();
st.clearWarnings();
}
}
st.executeBatch();
在这种情况下,第一个 executeBatch() 成功了。
但是,第二个 executeBatch() 失败,出现“开始快速加载数据库表 XXX 时出错”。
谁能解释我应该如何加载 1 亿行?
是否有我缺少的配置(例如,告诉驱动程序定期推送一些更新而不是将它们保存在内存中)?
谢谢,
一个。