Schrecklich langsam laden Pandas Data Frame mit 150 Spalten und 5 Millionen Zeilen in SQL ServerPython

Python-Programme
Guest
 Schrecklich langsam laden Pandas Data Frame mit 150 Spalten und 5 Millionen Zeilen in SQL Server

Post by Guest »

Ich versuche, Daten aus Pandas DataFrame mit 150 Spalten und 5 Millionen Zeilen zu laden. Auf meiner Maschine oder meiner prod -serverlosen Plattform dauert es 4 bis 5 Stunden, um in die SQL Server -Tabelle zu geladen. Wenn ich SSIS gleich benutze, brauchte die Datei nur 5 bis 8 Minuten, um zu laden. Kein Netzwerk oder kein E/A -Datenverkehr. < /p>

Pandas to_sql < /p>
< /li>
SQL Alchemy Insert () < /p>
< /li>
< /ol>
Können Sie bitte die beste und schnelle Möglichkeit vorschlagen, Daten zu laden? < /p>
Ich verwende

Treiber : ODBC 18 für SQL Server; UID: ; PWD : ; autoCommit = yes ; TrustedServercertificate = yes

", isolation_level =" autocommit ")
Fall 1
: pandas to_sql (dies dauert 4 bis 5 Stunden zum Laden)
Hier lade ich riesige Daten in DataFrame Chunk von Chunk < /p>

Code: Select all

data_chunk = pd.Data_Frame()
data_chunk = pd.read_csv('file_path, chunksize=50000,sep='I')
for chunk. in data_chunk:
finaldata = finaldata._append(str)
< /code>
[b] Laden Sie den Datenframe in SQL Server -Tabelle < /strong>

finaldata.to_sql('Table_Name',conn=engine.connect(),if_exists='append',index=False,chunk_size=50000)

unten funktioniert fein mit chunk_size = 10, aber ich habe Millionen von Datensätzen geladen. Mit Chunk_Size = 15+ gibt es unten Fehler < /p>

pyodbc.Error:('07002','A07002] [Microsoft] [ODBC -Treiber 18 für SQL Server] [Zählfeld Falsch oder Syntaxfehler (0) (SQLEXECDIRECTW)]

Fall 3 [/b]: SQL -Alchemie -Insert () < /p>
lade hier riesige Daten in Chunk -> DataFrame-> SQL Server -Tabelle mit SQL Alchemy Insert () < /p>

Code: Select all

data_chunk = pd.Data_Frame()
data_chunk = pd.read_csv('file_path, chunksize=10,sep='I')
for chunk. in data_chunk:
finaldata = finaldata._append(str)
Laden Sie den Datenframe in die SQL -Server -Tabelle
mit der gleichen für Loop

Code: Select all

Session = sessionmaker(bind=engine)
session = Session()
data_to_insert = finaldata.to_dict(orient='records')
stmt = insert(table).values(data_to_insert)
session.execute(stmt)
session.commit()
session.close()
Wie laden Sie Daten schneller?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post