Tło

Szybko zhakowany skrypt Pythona do przekształcania plików mysqldump w pliki CSV. Zoptymalizowany dla zrzutów baz danych Wikipedii.

Niezwykle duże zrzuty MySQL mogą być trudne lub niemożliwe do zaimportowania na dość ograniczonym sprzęcie. Irytującą rzeczą w zrzucie MySQL jest to, że jedynym praktycznym sposobem manipulowania nim jest MySQL, co w zasadzie wymaga modernizacji sprzętu, jeśli chcemy pracować z dużymi zrzutami, takimi jak zrzuty Wikipedii MySQL.

Czy nie byłoby wspaniale, gdyby istniał jakiś sposób na konwersję formatu zrzutu MySQL (który jest serią instrukcji INSERT) do uniwersalnego formatu… takiego jak… CSV?

Cóż, teraz jest.

Ten krótki skrypt Pythona korzysta z faktu, że struktura instrukcji INSERT MySQL nie różni się zbytnio od CSV, i używa parsera CSV Pythona (przed i po przetworzeniu tekstu), aby przekształcić plik zrzutu MySQL w plik CSV.

Użycie

Po prostu uruchom python mysqldump_to_csv.py, a następnie nazwę pliku SQL. Możesz podać wiele plików SQL, a wszystkie one zostaną połączone w jeden plik CSV. Ten skrypt może również pobierać pliki SQL ze standardowego wejścia, co może być przydatne do przekształcenia spakowanego zrzutu MySQL w plik CSV bez rozpakowywania zrzutu MySQL.

zcat dumpfile.sql.gz | python mysqldump_to_csv.py

Jak to działa

Następujący SQL:

INSERT INTO `page` VALUES (1,0,'April','',1,0,0,0.778582929065,'20140312223924','20140312223929',4657771,20236,0),(2,0,'August','',0,0,0,0.123830928525,'20140312221818','20140312221822',4360163,11466,0);

zostaje przekształcony w następujący CSV:

1,0,April,1,0,0,0.778582929065,20140312223924,20140312223929,4657771,20236,02,0,August,0,0,0,0.123830928525,20140312221818,20140312221822,4360163,11466,0

Nie jest zbyt trudno zobaczyć, co się dzieje, ale z pewnością można zajrzeć do kodu źródłowego, aby zobaczyć dokładnie, jak dokonywana jest transformacja.

Todo

  • Rygorystyczna seria testów jednostkowych, udowadniająca, że działa to na zróżnicowanym zestawie plików zrzutu MySQL bez żadnych efektów ubocznych
  • Trochę więcej dokumentacji
  • Rozwiązanie błędu, w którym jedna kolumna jest ciągiem kończącym się na ), a następna kolumna jest ciągiem zaczynającym się na (. Obecna logika programu sugeruje, że nawiasy zostałyby usunięte

.