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

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Schrecklich langsam laden Pandas Data Frame mit 150 Spalten und 5 Millionen Zeilen in SQL Server

by Anonymous » 12 Feb 2025, 04:38

Ich versuche, Daten aus Pandas DataFrame mit 150 Spalten und 5 Millionen Zeilen zu laden. Ab sofort dauert es 4 bis 5 Stunden, um in die SQL -Servertabelle zu laden. < /p>
Tabelle hat keine Indizes und es gerade Dump. Wenn ich SSIS gleiche Datei verwende, dauerte es nur 5 bis 8 Minuten, um zu laden.no -Netzwerk oder kein E/A -Datenverkehr. /p>
Ich habe unten die Methoden verwendet: < /p>

Pandas to_sql < /p>
< /li >
/ol>
Am

Treiber < /strong>: ODBC 18 für SQL Server; UID: ; PWD < /strong>: ; autocommit = yes; vertrauen , fast_executemany = true ", isolation_level =" autocommit ")
Fall 1
: pandas to_sql (dies dauert 4 bis 5 Stunden, um zu laden)

lade ich riesige Daten in DataFrame -Chunk durch Chunk < /strong> < /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>
 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>

Code: Select all

pyodbc.error:('07002','[07002] [Microsoft][ODBC Driver 18 for SQL Server][COUNT field incorrect or syntax error (0) (SQLExecDirectw)]
< /code>
 Fall 3 < /strong>: SQLServer -Tabelle mit SQL Alchemy Insert () ** < /p>
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)
< /code>
 Laden Sie den Datenframe in SQL Server -Tabelle < /strong>

--with in the same for loop
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()
Bitte schlagen Sie mir vor, wie Sie Daten schneller laden können.

Top