sabato, dicembre 08, 2012

Lavorare su grossi file di testo

Quando devi migrare un database da un dbms ad un altro o esistono dei tool fatti e testati che fanno questo lavoro, oppure te li crei oppure ti esporti tutto in un bel file sql corposo e cerchi di ricaricare i vecchi dati sulle tabelle nuove.
Nel caso recente, un db con 25milioni di record su PostGres da migrare a Mysql, dumpato in plaintext sql ha generato un file di 2.4GB e spicci.
Problema: una volta creato il file sql scopri che alcune righe all'inizio del file generano errori e bloccano l'importazione. Che fare? Se hai a disposizione una shell Unix-like:
  • giochi con tail/awk
  • provi ad editare con vi il file e salvarlo
  • (cosa che mi sembrava più utile) splitti il file in file più piccoli da 500k righe l'uno e poi editi il primo

Su Windows le cose sono naturalmente più fastidiose:
ho sempre usato editor di testo derivanti dalle librerie Scintilla (SciTe ed Notepad++ in primis), sono belle potenti ma hanno il bruttissimo difetto di diventare praticamente inutili quando si trovano di fronte file grossi.

Update 1: mi è venuto in mente che in realtà per Windows Server esiste un resource kit contenente il tail.
Oppure si può usare il comando more +numero_di_righe.
Resta il fatto che  non esiste il comando split nativo, bisogna giocare con il rognoso FOR di DOS.

Soluzione commerciale il caro vecchio UltraEdit, che è a pagamento ma devo dire, non mi ha mai deluso.
Cercando su Stackoverflow ho poi trovato una chicca: TheGun un vecchio editor scritto in assembler e il suo successore, TopGun



Il primo è riuscito ad aprire il file ma aveva problemi nel modificarlo, il secondo ha aperto il file e mi ha permesso di modificarlo come UltraEdit.


Ora, naturalmente in quesot caso si lavorava a bocce ferme e mi sto iniziando a studiare il funziamento degli ETL con Pentaho, perchè non ho a disposizione SSIS di Microsoft, ma la curiosità mi è rimasta.
Quali consigli avete per editare GROSSI file di testo? Script/linguaggi/editor, qualsiasi suggerimento è gradito.

1 commento:

  1. Mi tocca persino aggirare Disqus per poter commentare.

    Comunque scarichi vim per Windows ed hai risolto il problema. Oppure sed/grep e tutto li resto, comodamente compilati per win32.

    O ti installi un linguaggio rapido, ad esempio python, e prepare tre righe di script che facciano il lavoro che ti serve.

    RispondiElimina

Ricordatevi che i commenti vengono moderati!!!