Sto provando a caricare in massa un sacco di dati (5,5 milioni di righe) in un file di database SQLite. Il caricamento tramite INSERT sembra essere troppo lento, quindi sto provando a utilizzare lo strumento da riga di comando sqlite3 e il comando .import.Come automatizzare un processo con lo strumento da riga di comando sqlite3.exe?
Funziona perfettamente se inserisco i comandi a mano, ma non riesco per la vita di me a capire come automatizzarlo da uno script (file .bat o script python; Sto lavorando su una macchina Windows).
I comandi ho problema nella riga di comando sono i seguenti:
> sqlite3 database.db
sqlite> CREATE TABLE log_entry (<snip>);
sqlite> .separator "\t"
sqlite> .import logfile.log log_entry
Ma niente provo avranno questo lavoro da un file bat o uno script python.
ho cercato le cose come:
sqlite3 "database.db" .separator "\t" .import logfile.log log_entry
echo '.separator "\t" .import logfile.log log_entry' | sqlite3 database.db
Sicuramente posso fare questo in qualche modo?
Quanto lento è il caricamento tramite INSERT? Inserisco 15 milioni di righe di grandi dimensioni in Sqlite in 12 minuti con istruzioni di inserimento. Devi usare le transazioni e le dichiarazioni preparate. – tuinstoel
Molto lento. Sto usando python per analizzare un file di log e inserire ogni riga come una riga. Non sto usando dichiarazioni preparate, ma sto usando le transazioni. Anche così è molto più veloce farlo utilizzando il programma sqlite3. – dave
L'uso di istruzioni preparate fa una grande differenza. Posso creare un database sqlite da due gigabyte (1 grande tavolo con 1 indice) in 12 minuti con INSERT su un PC standard. – tuinstoel