Isi dari file CSV tersebut adalah seperti ini :
======
NAMA; ALAMAT; TELPON; KODE POS
Saya; Jl. Jalan Disana; 0215554848; 12345
Kamu; Jl. Jalan Disini; 0215558348; 98765
======
Maka, perintah untuk memasukkannya ke sebuah table di MySQL dengan format fields yang sama adalah sebagai berikut :Â
======
mysql -e "LOAD DATA INFILE '/tmp/tmp/inidata.csv' INTO TABLE datasaya.tablesaya FIELDS TERMINATED BY ';' LINES TERMINATED BY 'rn' "
======
Keterangan :
FIELDS TERMINATED BY ';' : karena setiap field di file CSV tersebut ternyata dipisahkan oleh ';', bukan koma.
LINES TERMINATED BY 'rn' : tanpa opsi ini, maka ketika data tersebut di SELECT, outputnya akan berantakan.
BERSIH-BERSIH
Pembaca yang bermata & bernalar tajam tentu akan langsung paham, bahwa, perintah tersebut diatas juga akan memasukkan record pertama 🙂 yaitu :Â
======
NAMA; ALAMAT; TELPON; KODE POS
======
Untunglah solusinya mudah, yaitu perintah berikut ini :
======
mysql -e "DELETE FROM tablesaya WHERE kode_pos='KODE POS';"
======
BANYAK FILE
Happy ending ? Belum 🙂 karena, ternyata datanya ada ratusan ribu record, DAN tersebar di ratusan file, di puluhan sub-direktori…. #glekÂ
Untunglah ini dunia Unix / Linux 🙂 sehingga, solusinya cukup berupa script ringkas sbb :
=============
#!/bin/bash
DATABASE=datasaya
TABLE=tablesaya
#backup current table
mysqldump $DATABASE $TABLE > ~/backup/$DATABASE-$TABLE—`date +%d-%m-%Y`.mysql
# set line terminator to be nÂ
# (default: space)
# if this is not set, then $FILES content will be really messed upÂ
# when there are files with space in their name
IFS=$'n';
FILES="$(find /tmp/tmp -type f -name '*')"
for f in $FILES
do
 echo "Processing $f file…"
mysql -e "LOAD DATA INFILE '$f' INTO TABLE $DATABASE.$TABLE FIELDS TERMINATED BY ';' LINES TERMINATED BY 'rn' "
mysql -e "DELETE FROM $TABLE WHERE kode_pos='KODE POS';"
done
=============
Semoga bermanfaat.
This post has been reshared 1 times on Google+
View this post on Google+
Post imported by Google+Blog for WordPress.