Mac OS X 環境の SQLite3 で、Windows の CSV ファイルを DB にインポート。
ポイント
- インポートする CSV の文字コードを UTF-8 に変換しておく必要がある
- CSV のカラムに合わせて CREATE TABLE しておく必要がある
- CSV の1行目をスルーしてくれるようなコマンドオプションはない
例)
- インポートする環境の OS は Mac OS X
- インポートするCSV ./data.csv (Windows 環境からもらった Shift_JIS のファイル)
- CSV のカラムは、id, item_name, quantity
- DB は ./shop.db
- テーブルは items
まずは nkf を使って data.csv を UTF-8 に。
# 一度 EUC-JP、改行コード LF に変換する $ nkf --unix ./data.csv # From EUC-JP To UTF-8 $ nkf -w --overwrite ./data.csv
UTF-8 に変換できた data.csv を shop.db の items テーブルにインポートする。
# CSV のカラムに合わせて CREATE TABLE $ sqlite3 ./shop.db "CREATE TABLE items (id, item_name, quantity INTEGER);" # separator を , に設定して .import を実行 $ sqlite3 -separator ',' ./shop.db '.import ./data.csv items' # CSV の一行目もインポートしてしまうので、余分なレコードを削除 # この場合、「id」という文字列の id はないものと想定 $ sqlite ./shop.db "DELETE FROM items WHERE id='id';"
これで Windows の Excel では開くのに物凄く時間がかかるような CSV も SQLステートメントで操作することが可能になる。