Background

Um script Python de hacking rápido para transformar arquivos mysqldump em arquivos CSV. Otimizado para os dumps da Wikipedia.

Dumps MySQL extraordinariamente grandes podem ser difíceis ou impossíveis de importar em hardware bastante limitado. O irritante sobre um dump MySQL é que a única maneira prática de o manipular é através do MySQL, que essencialmente requer uma actualização de hardware caso se queira trabalhar com grandes dumps como os dumps MySQL da Wikipedia.

Não seria óptimo se houvesse alguma forma de converter o formato dump MySQL (que é uma série de declarações INSERT) para um formato universal… como… CSV?

Bem, agora existe.

Este pequeno script Python tira vantagem do fato de que a estrutura de uma instrução INSERT do MySQL não é muito diferente do CSV, e usa o analisador Python CSV (antes e depois de alguma disputa de texto) para transformar o arquivo dump do MySQL em um arquivo CSV.

Utilização

Executar apenas python mysqldump_to_csv.py seguido pelo nome de arquivo de um arquivo SQL. Você pode especificar vários arquivos SQL, e todos eles serão concatenados em um arquivo CSV. Este script também pode pegar arquivos SQL de entrada padrão, o que pode ser útil para transformar um dump do MySQL gzipado em um arquivo CSV sem descompactar o dump do MySQL.

zcat dumpfile.sql.gz | python mysqldump_to_csv.py

Como Funciona

O seguinte 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);

é transformado no seguinte 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

Não é muito difícil ver o que está acontecendo, mas você certamente pode olhar para o código fonte para ver exatamente como a transformação é feita.

Todo

  • Uma série rigorosa de testes unitários, provando que isto funciona num conjunto diverso de ficheiros dump do MySQL sem quaisquer efeitos secundários
  • Mais documentação
  • Uma solução para um bug onde uma coluna é uma string que termina em ) e a coluna seguinte é uma string que começa em (. A lógica atual do programa sugere que os parênteses seriam descascados.