Memasukkan Data CSV ke MySQL

:: Beberapa hari yang lalu, saya diminta oleh seorang data analyst untuk memasukkan sekumpulan data di file CSV ke MySQL. Alhamdulillah ini mudah dilakukan di MySQL, dengan memanfaatkan perintah "LOAD DATA INFILE"

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.

Post imported by Google+Blog for WordPress.

52 thoughts on “Memasukkan Data CSV ke MySQL

  1. +Fakhrul Rijal – saya belum pernah melakukannya, jadi saya konsultasi ke Mbah Google : https://www.google.com/search?q=copy+mdb+to+mysql

    Ini dapat rekomendasi paling banyak : http://www.bullzip.com/products/a2m/info.php

    2 diskusi berikut ini memberitahukan berbagai solusi lainnya juga, termasuk yang bisa turut meng copy relationship antar tables yang ada di Access :

    http://stackoverflow.com/questions/5722544/how-can-i-convert-an-mdb-access-file-to-mysql-or-plain-sql-file

    http://stackoverflow.com/questions/4809654/how-to-import-an-access-mdb-format-database-to-mysql

  2. saya pernah ingin menangis gara-gara salah memasukkan data di mysql padahal dikejar boss untuk segera selesai, benar-benar sulit ternyata, harus sering berkunjung kesini tampaknya

  3. wah keren juga nih gan baru tahu saya keren juga ya csv sudah menyiapkan diri untuk di restore ke mysql, kalau ke SQL apakah sama caranya?

  4. udah ane coba.. tapi kok error ya om ? insertnya gagal terus, nanti ane kirim screenshotnya ya om.. mohon direview

  5. makasih atas info bermanfaatnya gan…nambah ilmu ane ne info…

    ane tunggu artikel selanjutnya gan…

  6. Terima kasih gan atas informasinya, sudah beberapa hari ini saya mencari informasi ini, ini sungguh sangat membantu saya . mulai sekarang saya akan bookmark blog ini agar saya bisa kembali dan melihat informasi yang terbaru.
    mungkin agan atau pengunjung blog agan juga membutuh kan infomasi dari saya, silahkan liat artilek saya yang sangat Mohon kunjungi website kami
    Judi Online http://www.168sdbet.com
    Terima kasih

  7. Dear sufehmi.com webmaster, You always provide great examples and real-world applications, thank you for your valuable contributions.

Leave a Reply

Your email address will not be published. Required fields are marked *