Thursday, September 1, 2016

Generate .csv file from table data

Generate .csv file from table data
===========================

2 ways:
A> From MySQL Prompt
:
1> Logon to MySQL
      mysql -utest -ptest -Dpractice
2> Load Data: 
      mysql> select locationId,country,latitude,longitude from cityLoc limit 10 INTO OUTFILE '/tmp/cityLocs1.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';
Query OK, 10 rows affected (0.00 sec)

Note: The above method will generate an error, if the file already exists.

B> From shell script:
1> export del=','
2>
mysql -utest -ptest -Dpractice --skip-column-names -e"select concat(locationId,'$del',IFNULL(country,''),'$del',latitude,'$del',longitude) from cityLoc limit 10 ;" > /tmp/cityLocs2.csv 

Note: For both cases, need to add column header line at the top
COLHEADER='
locationId,country,latitude,longitude'
sed -i 1i"$
COLHEADER" /tmp/file.csv 

Modification: Lets say, need to add "'" (single quote) around varchar columns:
mysql> select locationId,concat('\'',country,'\''),latitude,longitude from cityLoc limit 10 INTO OUTFILE '/tmp/cityLocs2.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

Special keywords:
INTO OUTFILE '/tmp/cityLocs.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

No comments:

Post a Comment