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

Résolu
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

  1. Contributeur
    bonjour,
    dans quoi dois-tu importer?
    peux-tu montrer un code complet?
    1. Contributeur
      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.
    2. Bonjour,

      Le code se résume à ça seulement (juste avant je me connecte au serveur SQL avec la variable sql_conn)
    3. @yg_beJ'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 ?
    4. Contributeur
      @nbl335si le code ne fait rien de plus, à quoi sert-il? comme tu ne fais rien avec dft et dfm, pourquoi faire tout cela?
    5. Contributeur
      @nbl335tout dépend de ton code et de ton contexte.
      pourquoi penses-tu qu'il est plus efficace de tout importer avent de commencer à exporter?