Tausta

Nopeasti kasattu Python-skripti mysqldump-tiedostojen muuttamiseksi CSV-tiedostoiksi. Optimoitu Wikipedian tietokantadumpeille.

Erittäin suuria MySQL-dumppeja voi olla vaikea tai mahdoton tuoda melko rajoitetulla laitteistolla. Ärsyttävää MySQL-dumpissa on se, että ainoa käytännöllinen tapa manipuloida sitä on MySQL:n kautta, mikä periaatteessa vaatii laitteistopäivityksen, jos haluaa työskennellä Wikipedian MySQL-dumppien kaltaisten suurten dumppien kanssa.

Eikö olisi hienoa, jos olisi jokin tapa muuntaa MySQL-dumppien formaatti (joka on sarja INSERT-käskyjä) universaaliin formaattiin… kuten… CSV:ksi?

Nyt nyt on.

Tämä lyhyt Python-skripti käyttää hyväkseen sitä tosiasiaa, että MySQL:n INSERT-lausekkeen rakenne ei poikkea liikaa CSV:stä, ja käyttää Pythonin CSV-parseria (ennen ja jälkeen jonkin verran tekstin vääntelyä) muuttaakseen MySQL-dumppitiedostosta CSV-tiedoston.

Käyttötarkoitus

Ajoita vain komentorivillä: python mysqldump_to_csv.py ja sen perässä SQL-tiedoston tiedostonimi. Voit määrittää useita SQL-tiedostoja, ja ne kaikki liitetään yhteen CSV-tiedostoksi. Tämä skripti voi myös ottaa SQL-tiedostoja vakiosyötteestä, mikä voi olla hyödyllistä, kun halutaan muuttaa pakattu MySQL-dumppi CSV-tiedostoksi purkamatta MySQL-dumppia.

zcat dumpfile.sql.gz | python mysqldump_to_csv.py

Miten se toimii

Seuraava 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);

muutetaan seuraavaksi CSV:ksi:

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

Ei ole kovin vaikeaa nähdä, mitä on tekeillä, mutta voit toki katsoa lähdekoodia nähdäksesi tarkalleen, miten muunnos tehdään.

Todo

  • Tarkka sarja yksikkötestejä, jotka todistavat, että tämä toimii monipuolisella joukolla MySQL-dumppitiedostoja ilman sivuvaikutuksia
  • Jotain lisää dokumentaatiota
  • Ratkaisu bugiin, jossa yksi sarake on merkkijono, joka loppuu ):een, ja seuraava sarake on merkkijono, jonka alkukirjainmerkki on (. Nykyisen ohjelmalogiikan mukaan sulkeet poistettaisiin.