Optimiser lecture base de données (millions de lignes) [Résolu]

Signaler
-
Messages postés
29799
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
5 mai 2021
-
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

Messages postés
15487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mai 2021
846
bonjour,
dans quoi dois-tu importer?
peux-tu montrer un code complet?
Messages postés
15487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mai 2021
846 > nbl335
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
Bonjour,

Le code se résume à ça seulement (juste avant je me connecte au serveur SQL avec la variable sql_conn)
Messages postés
15487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mai 2021
846 > nbl335
si le code ne fait rien de plus, à quoi sert-il? comme tu ne fais rien avec dft et dfm, pourquoi faire tout cela?
>
Messages postés
15487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
6 mai 2021

En fait j'ai un premier fichier python où j'importe mes données (dont dft et dfm)
Ensuite je les traite dans un second fichier python
Mais avant cela je dois les importer et c'est là que ça plante...
Messages postés
29799
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
5 mai 2021
7 085 > nbl335
Bonjour,

Comme le dit fort justement yg_be, vu que tu ne peux pas charger l'intégralité de ta dataframe en mémoire, tu es obligé de la traiter chunk par chunk, et donc tu ne peux pas découpler le chargement et le traitement.

Dit autrement, tu ne peux pas espérer construire intégralement
dfm
en mémoire. Dans ton cas, je pense qu'il faut traiter que ton programme exporte directement chaque chunk reçu.

Bonne chance