web-dev-qa-db-ja.com

MYSQLはLOAD DATA INFILEを使用してcsvからデータをインポートします

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

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

実行したとき

LOAD DATA INFILE'abc.csv' INTO TABLE abc

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

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

94
MANJEET

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キーワードを使用するとセキュリティ上のリスクがあり、MySQL 8.0以降ではLOCAL機能はデフォルトでFalseに設定されています。あなたはエラーが表示されるかもしれません:

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

あなたは docsの指示 に従ってそれを上書きすることができます。そのような上書きはセキュリティの問題を解決するのではなく、むしろあなたがリスクを認識していると思っているという単なる認識であることに注意してください。

150
Saharsh Shah

おそらく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;
46
ckim

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

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

次のような表があるとします。

enter image description here

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

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ファイルは適切な形式でフォーマットされていなければなりません。

enter image description here

すべてがうまくいったら.. LOAD DATA FROM CSV FILEに以下のクエリを実行してください。

注: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からテーブルにデータを正常にエクスポートしました

46
Sunny S.M

構文:

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;
14

データベースに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
    ')or die(mysqli_error());
$affected = (int) (mysqli_affected_rows($cons))-1; 
$log->lwrite('Inventory.CSV to database:'. $affected.' record inserted successfully.');

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

6
krunal panchal

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

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

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

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

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

Localhostでこれを行っている場合、これがエラーを省略するのに役立つことを願います。

2
Mohammad Arshi

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

これは私のためにwampserver 3.0.6 64bitを使ってWindows 8.1 64 bitで動きました。

My.iniファイルをC:\ wamp64\bin\mysql\mysql5.7.14から編集しました

エントリsecure_file_priv c:\ wamp64\tmp \を削除します。

Wampなどを終了してすべてを停止し、すべてを再起動しました。それからC:\ wamp64\bin\mysql\mysql 5.7.14\data\u242349266_recurの私のcvsファイルをパントして下さい(最後のディレクトリは私のデータベース名です)

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

INTO TABLEの卒業生

'、'で終了するフィールド

「」で囲まれています

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

IGNORE 1ライン

...そしてVOILA !!!

0
Carlos Garcia

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

table.sql

id //field 1

name //field2

table.txt

1,peter

2,daniel

...

- 窓の例

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

WindowsシェルからLOAD DATA LOCAL INFILEを実行していて、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
0
Kikoz

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

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