jOOQ - Запрос предложения по быстрой вставке из CSV
Я использую приведенный ниже код для вставки записей из большого csv (100000 записей) в Oracle с помощью jOOQ. Вот фрагмент:
CSVReader csvReader = null;
String csvError;
try {
csvReader = new CSVReader(new FileReader(tempFile));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
//delete previous uploaded stuff from the same user
clearTable(user.getUserId());
List<BSearchRecord> records = new ArrayList<>();
boolean isFirst = true;
while (csvReader.hasNext()) {
if(isFirst) {
//validate headers
String[] headers = csvReader.next();
uploadedHeaders = headers;
csvError = validateHeadersLength(headers);
if(csvError != null) {
return csvError;
}
for(int i=0; i<headers.length; i++) {
csvError = validateEachHeader(i, headers[i]);
if(csvError != null) {
return csvError;
}
}
isFirst = false;
continue;
} else {
String[] row = csvReader.next();
if(row != null) {
BSearchRecord bSearchRecord = new BSearchRecord();
bSearchRecord.set(RET_BSEARCH.UPLOADEDBY, user.getUserId());
for(int i=0; i<csvHeaders.length; i++){
Field field = bSearchRecord.field(backendColumns[i]);
bSearchRecord.set(field, row[i]);
}
records.add(bSearchRecord);
}
}
}
db.batchInsert(records).execute(); // IS THIS OKAY ? (is this batch enabled?)
Я наткнулся на несколько предложений, например: Проблемы с производительностью массовой вставки PostgreSQL/JooQ при загрузке из CSV; как мне улучшить процесс?
Однако мой вариант использования был немного другим, поэтому я спрашиваю об этом, чтобы получить предложение, правильно ли я делаю это или нет?
Кроме того, можете ли вы предложить, поддерживает ли реализация batchInsert(..) в jOOQ пакетное выполнение? (в документации я видел подход.bind(..), поэтому прошу это для ясности)
1 ответ
J OOQ имеет готовый API для импорта данных CSV:https://www.jooq.org/doc/latest/manual/sql-execution/importing/importing-csv
ctx.loadInto(BOOK)
.loadCSV(inputstream, encoding)
.fields(BOOK.ID, BOOK.AUTHOR_ID, BOOK.TITLE)
.execute();
Он позволяет вам удобно указывать размеры пакета / пакета / фиксации и дополнительное поведение. Я предлагаю вам использовать это.