Я использую драйвер Teradata jdbc 13.00.00.10 и пытаюсь загрузить плоский файл со 100 миллионами строк в 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();
Это быстро потребляет всю память для моего приложения.
Я установил 9 Гб XMX и получил OutOfMemory после ~ 40 миллионов addBatch ().
Затем я попытался периодически выполнять executeBatch () - итерация по файлу, и каждые 20 миллионов 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 () завершилась неудачно, с ошибкой "при запуске FastLoad таблицы базы данных XXX".
Может кто-нибудь объяснить, как я должен загрузить 100 миллионов строк?
Есть ли какая-то конфигурация, которую мне не хватает (например, чтобы драйвер периодически отправлял обновления и не держал их в памяти)?
Спасибо
A.