MySQLへcsvデータのインポート/ユーザ変数

MySQL

基本は↓

LOAD DATA INFILE ‘/tmp/data.csv’ INTO TABLE table01

デフォルトでは

\t (タブ)がフィールドの区切り
\n が改行

csvファイルを読み込むときは

FIELDS TERMINATED BY ‘,’

でカンマをフィールドの区切りに指定する。

行の区切りはテキストエディタによって違うので
LINES TERMINATED BY ‘\r\n’
とか
LINES TERMINATED BY ‘\r’
とか指定する。

LINES STARTING BY ‘xxx’(プリフィックス)

とかすると
xxx”abc”,1
something xxx”def”,2
“ghi”,3

abc 1
def 2

となる。

ユーザー変数の使い方

インプット ファイル内のフィールドの順番が、テーブル内のカラムの順番と異なる場合は、カラム リストも指定しなければいけません。
カラム リストはカラム名かユーザ変数のどちらかを含みます。ユーザ変数を利用すると、カラムに結果を割り当てる前に SET 条項で値を変換する事ができます。

SET 条項の中のユーザ変数は、いくつかの方法で利用する事ができます。次の例は、t1.column1 の値に対して直接最初のインプット カラムを利用し、そして2番目のインプット カラムを t1.column2 の値に利用される前に、分割操作に影響されるユーザ変数に割り当てます。

LOAD DATA INFILE ‘file.txt’
INTO TABLE t1
(column1, @var1)
SET column2 = @var1/100;

SET 条項は、インプット ファイルから派生した物ではない値を提供する事ができます。次のステートメントは、現在の日付と時間に column3 を設定する事ができます。

LOAD DATA INFILE ‘file.txt’
INTO TABLE t1
(column1, column2)
SET column3 = CURRENT_TIMESTAMP;

インプット値をユーザ変数に割り当て、変数をテーブル カラムに割り当てない事で、インプット値を廃棄する事ができます。

LOAD DATA INFILE ‘file.txt’
INTO TABLE t1
(column1, @dummy, column2, @dummy, column3);

コメント

タイトルとURLをコピーしました