MariaDB(MySQL)でCSVファイルをテーブルにインポート、テーブルをCSVファイルへエクスポートする方法
MariaDB(MySQL)でCSVファイルをテーブルへ取り込む(インポート)には、
LOAD DATA INFILE 'CSVファイル名'
を使います。
テーブルをCSVファイルに保存(エクスポート)するには、
INTO OUTFILE 'CSVファイル名'
を使います。
以下具体的なSQLで解説します。
CSVファイルのテーブル取り込み(インポート)
例えば取り込み先テーブル構造が以下とします。
CREATE TABLE IF NOT EXISTS t_csv(id INT, name VARCHAR(255), age INT);
カラム名 | 型 |
---|---|
id | INT |
name | VARCHAR(255) |
age | INT |
「insert.csv」ファイルが以下とします。
"id","name","age" 1,"イシダ",24 2,"カワサキ",31 3,"ソノダ",41
「LOAD DATA INFILE」を使うと「insert.csv」ファイルを「t_csv」テーブルに取り込むことが出来ます。
MariaDB(MySQL)サーバーがローカルファイルの読み込みを許可していない場合は
SET GLOBAL local_infile=on;
で一時的に許可設定にすることが出来ます。
SET GLOBAL local_infile=on;
LOAD DATA INFILE '/ディレクトリ/insert.csv'
INTO TABLE t_csv
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 ROWS;
オプションの説明
FIELDS TERMINATED BY ',' | フィールドの区切り文字を指定します |
FIELDS ENCLOSED BY '"' | クォートを指定します |
LINES TERMINATED BY '\r\n' | 行の終端記号(改行)を指定します |
IGNORE 1 ROWS | 最初から1行目を無視(ヘッダー行) |
FIELD ESCAPED BY 'エスケープ文字' |
エスケープ文字の指定 デフォルトは バックスラッシュ(半角エン記号「\」) |
MariaDB [db_test]> select * from t_csv; +------+--------------+------+ | id | name | age | +------+--------------+------+ | 1 | イシダ | 24 | | 2 | カワサキ | 31 | | 3 | ソノダ | 41 | +------+--------------+------+
テーブルのCSVファイルへの書き出し(エクスポート)
テーブルをCSVファイルに保存するには INTO OUTFILE を使います。
カラム名は出力できません。
SELECT * FROM t_csv
INTO OUTFILE '/ディレクトリ/output.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';
カラム名も出力したい場合はUNIONを使うしかないでしょう。
SELECT 'id','name','age' UNION SELECT * FROM t_csv INTO OUTFILE '/ディレクトリ/output.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n';
output.csv
"id","name","age" "1","イシダ","24" "2","カワサキ","31" "3","ソノダ","41"