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.
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
[b] Treiber < /strong>: ODBC 18 für SQL Server; UID: ; PWD < /strong>: ; autocommit = yes; vertrauen , fast_executemany = true ", isolation_level =" autocommit ")
Fall 1 [/b]: pandas to_sql (dies dauert 4 bis 5 Stunden, um zu laden)
lade ich riesige Daten in DataFrame -Chunk durch Chunk < /strong> < /p>
[code]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)[/code]
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]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()
[/code]
Bitte schlagen Sie mir vor, wie Sie Daten schneller laden können.