У меня есть файл .csv с 22 миллионами строк (~ 850 МБ), который я пытаюсь загрузить в базу данных postgres на Amazon RDS. Это происходит каждый раз (я получаю сообщение об ошибке тайм-аута), даже когда я разбиваю файл на более мелкие части (каждая из 100 000 строк) и даже когда я использую chunksize
.
Все, что я делаю на данный момент, это загружаю .csv в качестве фрейма данных, а затем записываю его в БД, используя df.to_sql(table_name, engine, index=False, if_exists='append', chunksize=1000)
Я использую create_engine из sqlalchemy для создания соединения: engine = create_engine('postgresql:database_info')
Я протестировал запись небольших объемов данных с помощью psycopg2
без проблем, но для записи 1000 строк требуется около 50 секунд. Очевидно, что для 22-метровых рядов это не сработает.
Есть ли что-нибудь еще, что я могу попробовать?
COPY
, поэтому вам не нужен обратный путь к объектам python (что делает его медленнее). - person joris   schedule 17.05.2015psycopg2
?) Поскольку 50 с для 1000 строк намного медленнее, чем то, что я испытываю с базой данных postgres. Так что, возможно, это также частично медленное соединение с базой данных. - person joris   schedule 17.05.2015COPY
подход? Если вы не хотите использовать команды SQL, но остаетесь в Python, вы можете взглянуть наodo
, который использует скрытую командуCOPY
для передачи данных из CSV в SQL: odo.readthedocs.org/en/latest/index.html - person joris   schedule 17.05.2015