Esportare i risultati di una query Mysql in formato CSV
Qualche tempo fa ho avuto la necessità di esportare da Mysql dei dati in formato CSV. I dati da esportare erano ottenuti a partire da una query SQL con varie join e trasformazioni.
Vincoli:
- non potevo creare il file sul server Mysql, quindi non ho potuto usare
INTO OUTFILE
direttamente nella query di produzione dei dati, - dovevo utilizzare il client
mysql
da riga di comando, quindi ad esempio niente Mysql Workbench.
Cercando in rete ho trovato su Stack Overflow una buona soluzione.
L’idea era eseguire la query attraverso il client mysql
e andare a trasformare l’output del comando in formato
CSV utilizzando il comando sed
.
L’idea si è rivelata una buona base di partenza, durante l’utilizzo ho migliorato la trasformazione dell’output risolvendo vari problemi che ho incontrato nel mio scenario.
mysql -u USER -p -B DB < QUERY.sql | sed 's/"/\\"/g' | sed "s/'/\'/;s/\t/\",\"/g;s/^/\"/;s/$/\"/;s/\"NULL\"/NULL/g;s/\n//g" >RESULT.csv
Lo script sopra presentato mantiene la licenza dello script originale: CC BY-SA 3.0.