Вставьте 2 миллиона строк в timscaldb с python -данными - PullRequest
0 голосов
/ 19 марта 2020

Я хочу добавить около 2 миллионов строк из CSV в Postger sql. Есть 2 способа.

  • С фреймами данных в python
  • или напрямую с Импортом CSV в PostgreSQL

Способ python:

engine = create_engine("postgresql+psycopg2://postgres:passwd@127.0.0.1/postgres")
con = engine.connect()
df = pd.read_csv(r"C:\2million.csv",delimiter=',',names=['x','y'],skiprows=1)
df.to_sql(name='tablename',con=con,schema='timeseries',if_exists='append',index=False)
print("stored")

Потребовалось 800 секунд, чтобы вставить. путь с прямым импортом в PostgreSQL занял всего 10 секунд.

Я думал, что время вставки с timescaledb намного быстрее, чем 800 секунд, для вставки 2 миллионов строк.

Или способ, которым я пытаюсь вставить строки, просто ограничивающий фактор?

1 Ответ

0 голосов
/ 20 марта 2020

Я не эксперт в timescaledb, но я не думаю, что он делает что-либо, просто будучи установленным. Вы должны вызывать его на каждом столе, для которого вы хотите его использовать, а вы этого не делаете. Таким образом, вы просто используете простой PostgreSQL здесь.

Pandas 'to_sql очень медленно. По умолчанию он вставляет одну строку для каждого оператора INSERT, что очень плохо сказывается на производительности. Если вы используете более новую версию pandas (> = 0.24.0), вы можете указать to_sql(...,method='multi',chunksize=10000), чтобы сделать это отстой немного меньше, указав несколько строк для оператора INSERT. Я думаю, что pandas реализовал это таким образом, вместо того, чтобы использовать массовый импорт, потому что каждая система баз данных выполняет массовый импорт по-своему.

Вы в корне неправильно используете pandas. Это библиотека для анализа данных, а не библиотека для массовой загрузки базы данных. Вы не только не пользуетесь возможностями массового импорта, определяемыми базой данных c, но и анализируете весь файл csv в кадре данных в памяти, прежде чем начать запись любого из них в базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...