SQLRU.net
Разработка приложений баз данных

Начало » Использование СУБД » PostgreSQL » parallel insert into table (загрузка данных в таблицу из 11000 файлов)
parallel insert into table [сообщение #748] Tue, 04 October 2022 07:44 Переход к следующему сообщению
danilov_a в настоящее время не в онлайне  danilov_a
Сообщений: 1
Зарегистрирован: October 2022
Junior Member
Всем доброго дня

Искал в инете но пока конкретного ответа (совета) не нашел.
Задача - загрузить данные в таблицу из примено 11000 CSV файлов
- перед вставкой из таблицы удалены все индексы и primary key,
- сделано alter table XXX set unlogged
Если загружать последовательно (файл за файлом) то это занимает около 7 часов
Если загружать ОДНИМ большим файлом (в котором содержатся данные из всех тех фалов
рамер около 20Гб), то около 2-ч часов

Меня заставляют перейти на пофайловую загрузку малых файлов ... т.к.
их выгрузка (из Ignite) распараллелена и занимает около 1,5 часов
Вот и мне говорят сделай так же!!! ... но Ignite (database in memory) это не PostgreSQL
Или все-таки можно както распараллелить insert в PostgreSQL

PS: сейчас каждый файл загружается вот так -
из пакета postgresql-42.2.18.jar вызывается CopyManager
......
StringBuilder sb;// - содержимое файла
LibPostgreServer pgJDBC;
pgJDBC.copyIn("COPY " + table + " FROM STDIN WITH (FORMAT text, DELIMITER '" + delimiter + "', ENCODING 'WIN1251') ", sb.toString());


public final long copyIn(String query, String str) {
long copyRows = 0;

try (ByteArrayInputStream in = new ByteArrayInputStream(str.getBytes())) {
Connection conn = LibPostgreServer.getConnection().unwrap(BaseConnection.class );
CopyManager copyManager = new CopyManager((BaseConnection) conn);
copyRows = copyManager.copyIn(query, in);
closeConnection(conn);
} catch (Exception ex) {
LibLogger.logMessageThrown(LibLogger.SEVERE, null, ex);
}

return copyRows;
}
Re: parallel insert into table [сообщение #750 является ответом на сообщение #748] Tue, 04 October 2022 10:56 Переход к предыдущему сообщению
BlackEric в настоящее время не в онлайне  BlackEric
Сообщений: 294
Зарегистрирован: June 2022
Senior Member
Я бы попробовал делать вставку исключительно средствами PostgreSQL через Copy
Предыдущая тема: Перевод с MS SQL
Следующая тема: CSV запрос
Переход к форуму:
  


Текущее время: Sat Apr 27 00:58:37 GMT+3 2024

Общее время, затраченное на создание страницы: 0.00509 секунд