Háttér
A quickly-hacked-together Python script to turn mysqldump files to CSV files. Optimalizálva a Wikipédia adatbázis dumps-ra.
Az extrém nagy MySQL dumps-ok importálása meglehetősen korlátozott hardveren nehéz vagy lehetetlen lehet. A bosszantó dolog a MySQL dumpokkal kapcsolatban az, hogy az egyetlen praktikus módja a manipulálásuknak a MySQL-en keresztül történik, ami lényegében hardverfrissítést igényel, ha valaki olyan nagy dumpsokkal akar dolgozni, mint a Wikipedia MySQL dumpjai.
Nem lenne nagyszerű, ha lenne valami módja a MySQL dump formátum (ami egy sor INSERT utasítás) átalakításának egy univerzális formátumba… mint pl…. CSV?
Nos, most már van.
Ez a rövid Python szkript kihasználja azt a tényt, hogy a MySQL INSERT utasítás szerkezete nem különbözik túlságosan a CSV-től, és a Python CSV parserét használja (némi szövegfeldolgozás előtt és után), hogy a MySQL dump fájlból CSV fájlt csináljon.
Használat
Elég a python mysqldump_to_csv.py
és az SQL fájl neve után futtatni. Több SQL-fájlt is megadhat, és ezek mindegyike egy CSV-fájllá lesz összefűzve. Ez a szkript standard bemenetről is képes SQL fájlokat fogadni, ami hasznos lehet egy gzippelt MySQL dump CSV-fájllá alakításához anélkül, hogy a MySQL dumpot kitömörítené.
zcat dumpfile.sql.gz | python mysqldump_to_csv.py
Hogyan működik
A következő 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);
a következő CSV-vé alakul:
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
Nem túl nehéz belátni, hogy mi történik, de természetesen megnézheted a forráskódot, hogy pontosan lásd, hogyan történik az átalakítás.
Todo
- Egy szigorú egységteszt-sorozat, amely bizonyítja, hogy ez működik a MySQL dump fájlok változatos halmazán, mellékhatások nélkül
- Még több dokumentáció
- Megoldás egy olyan hibára, amikor az egyik oszlop egy
)
-re végződő string, a következő oszlop pedig egy(
-vel kezdődő string. A jelenlegi program logikája szerint a zárójeleket le kellene szedni.
Vélemény, hozzászólás?