LOAD DATA INFILEを使用してCSVからデータをインポートするMYSQL


106

20000行のデータをCSVファイルからMysqlにインポートしています。

CSVの列は、MySQLテーブルの列とは異なる順序になっています。Mysqlテーブルの列に対応する列を自動的に割り当てる方法は?

実行すると

LOAD DATA INFILE'abc.csv' INTO TABLE abc

このクエリは、すべてのデータを最初の列に追加します。

Mysqlにデータをインポートするための自動構文を提案してください。



それは私に起こりました、テキストファイルが '\ r'で終了する行で書き込まれていることを知り、 '\ n'を使用して行が終了することを期待してデータをインポートしようとしました
Tamer

2
私は、Excelの構文ジェネレーターツールと共にcsvデータをmysqlロードするための広範なチュートリアルを書きました。それは読者にとって役立つはずです。
mysql_user 2018年

回答:


169

LOAD DATA INFILEコマンドを使用して、csvファイルをテーブルにインポートできます。

このリンクMySQL-LOAD DATA INFILEを確認してください。

LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);

MySQL 8.0ユーザーの場合:

LOCALキーワードholdセキュリティリスクを使用すると、MySQL 8.0以降、このLOCAL機能はFalseデフォルトで設定されています。次のエラーが表示される場合があります。

エラー1148:使用されたコマンドはこのMySQLバージョンでは許可されていません

docsの指示に従って上書きすることができます。このような上書きはセキュリティの問題を解決するのではなく、リスクを承知していて喜んで受け入れることを承認するだけであることに注意してください。


1
IGNORE 1 LINESここで正確には何がわかりますか?前もって感謝します。
Koushik Das 2016

5
@KoushikDas列名を定義する最初の行は無視されます
Saharsh Shah

28
注意:LINES TERMINATED BY '\ r \ n'句はWindowsファイルに対して機能しますが、Linuxファイルには '\ n'のみが必要です。
ChuckCottrill 2016年

1
スラッシュの使用を忘れないでください:stackoverflow.com/a/42878067/470749
Ryan

3
(col1、col2、col3 ....)は必須ではないことに注意してください。これを使用してデータを挿入する前に、その場でテーブルを作成する場合に役立ちます。
キーラン・クイン

51

おそらくFIELDS TERMINATED BY ','区切り文字を設定する必要があります。

CSVファイルの場合、ステートメントは次のようになります。

LOAD DATA INFILE 'data.csv' INTO TABLE tbl_name
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

1
LOAD DATA LOCAL INFILE ... LOCALがないと、アクセスが拒否されました。
ketankk 2018年

49

ファイルをインポートする前に、以下を準備する必要があります。

  • ファイルからのデータがインポートされるデータベーステーブル。
  • テーブルの列の数および各列のデータのタイプと一致するデータを含むCSVファイル。
  • MySQLデータベースサーバーに接続するアカウントには、FILEおよびINSERT権限があります。

次の表があるとします。

ここに画像の説明を入力してください

次のクエリを使用してテーブルを作成します。

CREATE TABLE IF NOT EXISTS `survey` (
  `projectId` bigint(20) NOT NULL,
  `surveyId` bigint(20) NOT NULL,
  `views` bigint(20) NOT NULL,
  `dateTime` datetime NOT NULL
);

CSVファイルは、添付された画像を次の例に示すように適切にフォーマットする必要があります。

ここに画像の説明を入力してください

すべてが問題ない場合は、次のクエリを実行してCSVファイルからデータをロードしてください。

注:CSVファイルの絶対パスを追加してください

LOAD DATA INFILE '/var/www/csv/data.csv' 
INTO TABLE survey 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

すべてが終わったら。CSVからテーブルにデータを正常にエクスポートしました


デフォルトでは無効なデータ型を無視するため、CSVファイルに各列に適切なデータ型があるかどうかを検証するにはどうすればよいですか。
Umar Abbas

2
そのような古い答えを邪魔してすみません。非常に説得力がありますが、一部のフィールドをスキップするにはどうすればよいですか。テーブルにprojectId、surveyId、dateTimeがあるとします。「views」フィールドをスキップするにはどうすればよいですか?
デンマーク語Ansari、

@MD Danish Ansari、古い質問に答えて申し訳ありませんが、テーブルの列を指定できます。最初のフィールド(自動インクリメントの主キー)とその他のいくつかのフィールドをスキップする必要がある場合は、次のようにしました。LOADDATA LOCAL INFILE 'C:\\ xampp \\ htdocs \\ data_files \\ 2018-10_statistics。 csv 'INTO TABLE my_log_tbl FIELDS TERMINATED BY'、 'ENCLOSED BY' "'LINES TERMINATED BY' \ r \ n '(UserId、CustomerId、InstitutionId、ApplicationId、FullURL、AccessTimeStamp、IPaddress);私は列がテーブル名、しかしそれはうまく
いき

17

構文:

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL]
INFILE 'file_name' INTO TABLE `tbl_name`
CHARACTER SET [CHARACTER SET charset_name]
FIELDS [{FIELDS | COLUMNS}[TERMINATED BY 'string']] 
[LINES[TERMINATED BY 'string']] 
[IGNORE number {LINES | ROWS}]

この例を参照してください:

LOAD DATA LOCAL INFILE
'E:\\wamp\\tmp\\customer.csv' INTO TABLE `customer`
CHARACTER SET 'utf8'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;

10

データベースに1分間で7000000を超える大量のレコードを挿入(計算を含む超高速クエリ)

mysqli_query($cons, '
    LOAD DATA LOCAL INFILE "'.$file.'"
    INTO TABLE tablename
    FIELDS TERMINATED by \',\'
    LINES TERMINATED BY \'\n\'
    IGNORE 1 LINES
    (isbn10,isbn13,price,discount,free_stock,report,report_date)
     SET RRP = IF(discount = 0.00,price-price * 45/100,IF(discount = 0.01,price,IF(discount != 0.00,price-price * discount/100,@RRP))),
         RRP_nl = RRP * 1.44 + 8,
         RRP_bl = RRP * 1.44 + 8,
         ID = NULL
    ');
$affected = (int) (mysqli_affected_rows($cons))-1; 
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');

RRPとRRP_nlとRRP_blはcsvにありませんが、それを計算してから挿入しました。


2

LOAD DATA LOCAL INFILEWindowsシェルから実行していて、を使用する必要がある場合はOPTIONALLY ENCLOSED BY '"'、文字を適切にエスケープするために、次のようにする必要があります。

"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql" -u root --password=%password% -e "LOAD DATA LOCAL INFILE '!file!' INTO TABLE !table! FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"^""' LINES TERMINATED BY '\n' IGNORE 1 LINES" --verbose --show-warnings > mysql_!fname!.out

2

xamppとphpmyadminを使用しているとしましょう

ファイル名は「ratings.txt」、テーブル名は「ratings」、データベース名は「movies」です。

xamppが「C:\ xampp \」にインストールされている場合

「ratings.txt」ファイルを「C:\ xampp \ mysql \ data \ movies」フォルダにコピーします

LOAD DATA INFILE 'ratings.txt' INTO TABLE ratings FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;

これがローカルホストでこれを行っている場合、エラーを省略するのに役立つことを願っています


0

CSVまたはテキストファイルからデータをロードできます。テーブルのレコードを含むテキストファイルがある場合、それらのレコードをテーブル内にロードできます。たとえば、各行が各列の値を持つレコードであるテキストファイルがある場合、この方法でレコードをロードできます。

table.sql

id //field 1

name //field2

table.txt

1,peter

2,daniel

...

-Windowsの例

LOAD DATA LOCAL INFILE 'C:\\directory_example\\table.txt'
INTO TABLE Table
CHARACTER SET UTF8
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'; 

0

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

これは、wampserver 3.0.6 64ビットを使用するWindows 8.1 64ビットで私にとってはうまくいきました。

C:\ wamp64 \ bin \ mysql \ mysql5.7.14からmy.iniファイルを編集

エントリsecure_file_priv c:\ wamp64 \ tmp \(またはここにある任意のディレクトリ)を削除します

すべてを停止し、ワンプなどを終了し、すべてを再起動しました。次に、C:\ wamp64 \ bin \ mysql \ mysql5.7.14 \ data \ u242349266_recur(最後のディレクトリは私のデータベース名です)にあるcvsファイルをパントします

LOAD DATA INFILE 'myfile.csv'を実行しました

INTO TABLE卒業生

「、」で終了するフィールド

「」で囲まれています

'\ r \ n'で終了する行

1行を無視

...そしてVOILA !!!


0

あなたはこのように挿入しようとすることができます:

LOAD DATA INFILE '/tmp/filename.csv' replace INTO TABLE [table name] FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (field1,field2,field3);

0

これらの日によって私はのようなツールを使用することを好む(2019年決算)http://www.convertcsv.com/csv-to-sql.htm 私はあなたが行の多くを持って、あなたがから来CSVときに、ユーザーのミスを保存するパーティションのブロックを実行することができます最終的なユーザースプレッドシート。

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