LOAD DATAINFILEを使用してCSVファイルからMySQLデータベースに選択した列を挿入する方法


83

10列のCSVファイルがあります。そのファイルからいくつかの列のみを選択し、LOAD DATA INFILEコマンドを使用してそれらをMySQLデータベースにロードしたいと思います。

回答:


118

MySQLのテーブルにデータをロードし、列を指定します。

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2 ;

@ col1,2,3,4は、csvファイルの列(4と仮定)を保持する変数です。name、idはテーブルの列です。


2
私はあなたの答えをmysqlで実行し、エラーが表示されます:ERROR 1148 (42000): The used command is not allowed with this MySQL version
shgnInc 2016


8
100列あり、2列をインポートしたい場合は、(@ col1、@ col2、... @ col100)set name = @ col4、id- @ col2;と書く必要があります。または簡単な方法はありますか?
ダルマ2016

@Dharma Aのpython 3プログラムは、100列名印刷するfor i in range(1,100): print("@column",i,",",end="",sep="")
Agnelヴィシャル

39
LOAD DATA INFILE 'file.csv'
  INTO TABLE t1
  (column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

column1、column2などを列名に置き換え、CSV内の無視する列がある場所に@dummyを配置するだけです。

詳細はこちら


5
そのようなものを実行すると、構文エラーが発生します。(field,names)セミコロンを機能させるには、最後にセミコロンの直前を配置する必要があります。
Stephen Ostermiller 2015年

1
あなたが入ってくるすべてのCSVの列を知っている限りこれはスケールしない。
チャールズ・ハーモン

4
Fはこの+38票でどうですか?SQL構文が間違っています。
ジョン

34

load datainfileステートメントでCSVの列の名前を指定します。

コードは次のようになります。

LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);

ここでは、テーブルの2つの列(列の名前で選択できます)にのみデータを追加します。

注意しなければならないのは、行(行)ごとに2つの値を持つCSVファイル(filename.csv)があることだけです。それ以外の場合は言及してください。別の解決策があります。

ありがとうございました。


2
おそらく他の答えは少し時代遅れです。これは
MySQL5.6で動作しました

ファイルへのフルパスを入力していただきありがとうございます。しばらくの間、csvファイルを配置する必要があるMySQLディレクトリを探していました。
シュリナート2015年

1
パスは許可された安全なエリアからでなければなりませんが、これが最適に機能します。このコマンドを実行しますSHOWVARIABLES LIKE "secure_file_priv"; 次に、csvファイルをこの場所にドロップします
Ganesh Krishnan 2017

1
@FabioNapodanoに同意します。v5.7の場合、ステートメントの最後に列名を付ける必要がありました。
アンガン

残念ながら、これは質問に答えません。これには、.csvに2つの列が必要であり、それらをDBの2つの特定の列に挿入します。ポスターは、10のcsvから2列をプルするように要求しています。
daprezjer19年

12

例:

ae.csvファイルの内容:

"Date, xpto 14"
"code","number","year","C"
"blab","15885","2016","Y"
"aeea","15883","1982","E"
"xpto","15884","1986","B"
"jrgg","15885","1400","A"

CREATE TABLE Tabletmp (  
    rec VARCHAR(9) 
);

列3のみを配置する場合:

LOAD DATA INFILE '/local/ae.csv' 
INTO TABLE Tabletmp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@col1, @col2, @col3, @col4, @col5)
set rec = @col3;


select * from Tabletmp;
    2016
    1982
    1986
    1400

1
例は常に優れています
Pierre de LESPINAY

3

データベーステーブルの列数がcsvの列数より多い場合は、次のように進めることができます。

LOAD DATA LOCAL INFILE 'pathOfFile.csv'
INTO TABLE youTable 
CHARACTER SET latin1 FIELDS TERMINATED BY ';' #you can use ',' if you have comma separated
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n'
(yourcolumn,yourcolumn2,yourcolumn3,yourcolumn4,...);

0

次のエラーがある場合:

エラーコード:1290。MySQLサーバーは--secure-file-privオプションを指定して実行されているため、このステートメントを実行できません。

このコマンドを実行するだけで、次の場所からファイルをロードできるフォルダーを確認できます。

SHOW VARIABLES LIKE "secure_file_priv";

その後、そのフォルダー内のファイルをコピーし、のLOAD DATA LOCAL INFILE代わりにを使用してクエリを実行する必要がありますLOAD DATA INFILE

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.