Najbardziej efektywny sposób na przetwarzanie dużego pliku tekstowego

0

Cześć! Zmagam się z problem gdzie muszę przetworzyć blisko 15GB danych zapisanych w pliku tekstowym i zapisać je do bazy danych. W jaki sposób zrobić to najszybciej?
Chciałem wykorzystać BULK INSERT z pyodbc ale dostaję błędy, których przeskoczyć nie potrafię. A może tutaj otrzymam pomoc? Bo mi się już pomysły i możliwości intelektualne skończyły. Linie (bo czasami podane są inne), które są wskazane w treści błędu niczym nie odbiegają od tych pozostałych.

pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Bulk load data conversion error (truncation) for row 67809

0

Nie wiem jak te dane wyglądają, ale najlepiej byłoby stworzyć z nich iterator i w pętli dodawać do bazy, linijka po linijce, czy dokument po dokumencie.

0

@lion137:
Są ustrukturyzowane, mają jeden format a każda linia ma być osobnym rekordem w bazie. Tylko tych wpisów będzie tyle, że aż nie chce mi się myśleć ile tam jest zer.
Nie mogę też wczytać całego pliku do pamięci, prawda?
Każda linia to ma być jeden insert? Czy przypuśćmy dla każdych 10 tysięcy linii dokładać VALUES(a, b, c, d, f) i dopiero później wykonać sqlke?

1

Nie mogę też wczytać całego pliku do pamięci, prawda?

Nie jest to polecane, po to iterator.

Każda linia to ma być jeden insert? Czy przypuśćmy dla każdych 10 tysięcy linii dokładać VALUES(a, b, c, d, f) i dopiero później wykonać sqlke?

To już nie wiem, ale chyba zasadniczej różnicy nie będzie. Nie powinno być tragicznie, ostatnio ładowałem dwa giga dokumentów do MongoDb, i może z 10 - 12 minut to trwało.

0

15 GB to nie jest duży plik, jak będziesz miał plik na którym wykonanie polecenia będzie wc będzie trwało 2h to wtedy nie użyjesz Insert Into bo nie doczekasz do końca...

$ time wc -l file.txt
28141365378 file.txt

real    96m2.974s
user    3m46.776s
sys     15m24.528s

1 użytkowników online, w tym zalogowanych: 0, gości: 1