CSVデータをSQLサーバーに流し込む方法

PC/デジモノ

やりたいこと

CSVデータをSQLサーバーにまとめて登録したい。

  • データベース名:DB_HOGE
  • テーブル名:TB_HOGE
  • カラムはYDT,temp,humid,press,batt
  • YDTは日時、それ以外はfloat(当然CSV側と一致していること)
  • CSVデータ(ファイル)はtestdata.csvとする

やりかた

$emacs csv2sql.sh
#!/bin/bash
SCRIPT_DIR=`dirname $0`
cd $SCRIPT_DIR
SQLFILE="/home/hoge/mysql.conf"

while read line
do

YDT="'"$(echo ${line} | cut -d , -f 1)"'"
TEMP=$(echo ${line} | cut -d , -f 2)
HUMID=$(echo ${line} | cut -d , -f 3)
PRESS=$(echo ${line} | cut -d , -f 4)
BAT=$(echo ${line} | cut -d , -f 5)

CMD_MYSQL="mariadb --defaults-extra-file=$SQLFILE"
QUERY="INSERT INTO DB_HOGE.TB_HOGE (YDT,temp,humid,press,batt) VALUES(${YDT},${TEMP},${HUMID},${PRESS},${BAT});"

echo ${QUERY} | ${CMD_MYSQL}

done <$1

$chmod 777 csv2sql.sh
$sudo ./csv2sql.sh testdata.csv

注意

mysql.confの内容は以下のようにしておくこと。(SQLサーバーのIDとパスワード)

[client]
user = hoge
password = hoge_password

結構時間がかかります。もっと早くて賢い方法があるはずですが今回は力業。

コメント