Перенос данных из SQLite в MySQL с использованием Python - PullRequest
0 голосов
/ 26 января 2019

У меня есть таблица с 40 миллионами записей в базе данных SQLite, которую мне нужно преобразовать (удалить столбцы и добавить несколько вычисляемых столбцов), объединить с двумя другими таблицами и вставить в базу данных MySQL.Для выполнения этой задачи я использую Python 2.7 для подключения базы данных SQLite и извлечения всей таблицы в кадр данных pandas.

df = pd.read_sql_query("select * from table1", con=dbname)

Я считаю, что загрузка полной таблицы в pandasэто не идеальное решение, и оно исчерпывает общую оперативную память моего ПК.Итак, я начал загружать таблицу порциями (скажем, 5 миллионов записей за раз) и преобразовывать ее с помощью цикла for, а затем помещать ее в базу данных mysql.

sql = 'SELECT * from table1" for chunk in pd.read_sql_query(sql, con=dbname, chunksize=10**6*5): df = table2.merge(chunk, on='columns', how='outer') ******tranformation code******* engine=create_engine("mysql+pymysql://user:user@localhost:3306/dbname") df.to_sql(name, con=engine, if_exists='append')

Приведенный выше код перемещает фрейм данных в MySQL, но проблема в том, что он создает дублирующиеся записи и длина таблицы 40M * chunksize = 200M records.

Я также проверил, есть ли какие-либо проблемы с частью преобразования кода, и я попытался выполнить тот же процесс для таблицы меньшего размера (около 5 миллионов записей) без цикла, а длина данных приблизительно равна необработанной таблице (из-зак соединениям и трансформации).Таким образом, с кодом преобразования проблем не возникает.

df=pd.read_sql_query("SELECT * from table1", con=dbname) df=table2.merge(df, on='columns', how='outer) *******transformation************ engine=create_engine("mysql+pymysql://user:user@localhost:3306/dbname") df.to_sql('name', con=engine, if_exists='append, chunksize=10**6*5, index=False)

Я не совсем понимаю, в чем проблема, но я был бы очень признателен, если бы мне помогли с этой проблемой..

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