Próbuję załadować dużą ilość danych (5,5 miliona wierszy) do pliku bazy danych SQLite. Ładowanie przez INSERTs wydaje się być zbyt wolne, dlatego próbuję użyć narzędzia wiersza poleceń sqlite3 i polecenia .import.Jak zautomatyzować proces za pomocą narzędzia wiersza polecenia sqlite3.exe?
Działa to doskonale, jeśli ręcznie wpisuję komendy, ale nie mogę do końca pracować nad tym, jak zautomatyzować skrypt (plik .bat lub python, pracuję na komputerze z systemem Windows).
Polecenia I wydać w wierszu polecenia są takie:
> sqlite3 database.db
sqlite> CREATE TABLE log_entry (<snip>);
sqlite> .separator "\t"
sqlite> .import logfile.log log_entry
Ale nic staram się uzyskać to do pracy z pliku bat lub skrypt Pythona.
Próbowałem rzeczy jak:
sqlite3 "database.db" .separator "\t" .import logfile.log log_entry
echo '.separator "\t" .import logfile.log log_entry' | sqlite3 database.db
pewnością mogę to zrobić w jakiś sposób?
Jak powolne jest ładowanie za pomocą INSERT? Wstawiam 15 milionów dużych wierszy w Sqlite w 12 minut za pomocą instrukcji insert. Musisz korzystać z transakcji i przygotowanych wyciągów. – tuinstoel
Bardzo wolno. Używam Pythona do parsowania pliku dziennika i wstawiania każdego wiersza jako wiersz. Nie używam przygotowanych wyciągów, ale korzystam z transakcji. Mimo to jest to o wiele szybsze, dzięki programowi sqlite3. – dave
Używanie przygotowanych oświadczeń ma ogromne znaczenie. Mogę utworzyć bazę danych o pojemności dwóch gigabajtów sqlite (1 duży stół z 1 indeksem) w ciągu 12 minut za pomocą INSERT na standardowym komputerze. – tuinstoel