Optimiser lecture base de données (millions de lignes)

Résolu/Fermé
nbl335 - Modifié le 14 avril 2021 à 13:31
mamiemando Messages postés 31789 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 1 décembre 2022 - 14 avril 2021 à 13:38
Bonjour,

Je dois importer 3 fichiers depuis une base de données.
Le premier (95000 lignes) ne pose aucun probleme
Par contre les deux autres font 75 millions de lignes pour respectivement 3 et 4 colonnes et j'ai une erreur de mémoire lorsque je compile.
J'utilise la technique chunksize pour importer par paquet mais cela ne suffit pas ...

voici à quoi ressemble mon code :

query2 = "SELECT [col1], [col2], [col3], [col4] FROM DATA1;"
df1 = pd.read_sql(query2, sql_conn, chunksize=100000)
dft = pd.concat(df1)

query3 = "SELECT [col1], [col2], [col3] FROM DATA2;"
df2 = pd.read_sql(query3, sql_conn, chunksize=100000)
dfm = pd.concat(df2)


Du coup les deux font 75 millions de lignes et impossible d'importer les données sur python (j'utilise PyCharm)

(sachant également que j'ai 8Go de RAM)

Configuration: Windows / Firefox 87.0

1 réponse

yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022 1 270
13 avril 2021 à 19:13
bonjour,
dans quoi dois-tu importer?
peux-tu montrer un code complet?
0
yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022 1 270
13 avril 2021 à 19:17
je ne vois pas bien d'où te viens l'idée d'importer par paquets et d'ensuite rassembler tous les paquets avant d'exporter.
ne te semble-t-il pas plus utile d'exporter les paquets au fur et à mesure?

n'hésite pas, par ailleurs, à nous préciser à quelle ligne tu as une erreur de mémoire. si tu ne peux pas le déterminer, ajoute des instructions print() pour déterminer ce que fait ton programme.
0
nbl335 > yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022
14 avril 2021 à 09:47
J'importe par paquet parce que j'ai pas assez de mémoire vive, de base j'importais respectivement 2 et 3 colonnes pour les 2 gros jeux de données et ça marchait avec chunksize mais pas sans.
Sauf que hier j'ai ajouté 1 colonne à importer dans chaque jeu de données (donc je passe à 3 et 4 colonnes) et ça plante...
Du coup tu me conseilles d'exporter au fur et à mesure les paquets ?
0
yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022 1 270 > nbl335
14 avril 2021 à 10:57
tout dépend de ton code et de ton contexte.
pourquoi penses-tu qu'il est plus efficace de tout importer avent de commencer à exporter?
0
nbl335 > yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022
Modifié le 14 avril 2021 à 11:26
Je sais pas si c'est plus efficace c'est juste la seule façon dont je sais faire mais je pense que tu as raison je devrais exporter paquet par paquet, je suis en train de chercher comment faire si tu as une piste je suis preneur
0
yg_be Messages postés 20751 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 décembre 2022 1 270 > nbl335
14 avril 2021 à 11:43
tu dois intégrer ta logique d'exportation dans ta logique d'importation.
df1 = pd.read_sql(query2, sql_conn, chunksize=100000)
for each paquetdf1 in df1:
     #exporter paquetdf1
0