私はMySQLテーブルにロードしようとしているクライアントからのノーマライズされていないイベントダイアリーCSVを持っています。それで、私は正しいフォーマットにリファクタリングすることができます。 CSVファイルの各列に1つのフィールドを持つ「CSVImport」という名前のテーブルを作成しました。 CSVには99個の列が含まれているので、これ自体は十分に困難な作業でした。
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
テーブルに制約はありません。カウント(INTで表される)、yes/no(BITで表される)、価格(DECIMALで表される)、およびテキストのぼかし(DECIMALで表される)が含まれる列を除くTEXTで表されます。
ファイルにデータをロードしようとしました。
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL | NULL | NULL |
...
テーブル全体がNULL
で埋められています。
問題は、テキストのぼかしに複数の行が含まれていることであり、MySQLは新しい各行が1つのdatabazse行に対応するようにファイルを解析しています。私は問題なくOpenOfficeにファイルをロードすることができます。
Clientdata.csvファイルには、2593行と570レコードが含まれています。最初の行には列名が含まれています。カンマで区切られていて、テキストは明らかに二重引用符で区切られていると思います。
更新:
よくわからないときは、マニュアルを読んでください: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
LOAD DATA
ステートメントにOpenOfficeが推論するのに十分賢いという情報を追加しました、そして今それは正しい数のレコードをロードします:
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
しかし、まだ完全にNULL
レコードがたくさんあり、ロードされたデータのどれも正しい場所にはないようです。
問題の中心は、CSVファイルの列と表の列を一致させることです。
多くのグラフィカルなmySQLクライアントは、このようなことのためにとてもいいインポートダイアログを持っています。
私の仕事で私のお気に入りはWindowsベースの HeidiSQL です。 LOAD DATA
コマンドを構築するためのグラフィカルインタフェースを提供します。後でプログラムで再利用できます。
スクリーンショット: "テキストファイルのインポート"ダイアログ
[テキストファイルのインポート]ダイアログを開くには、Tools > Import CSV file
に移動します。
テーブルをデータベースにロードするには、 mysqlimport を使用します。
mysqlimport --ignore-lines=1 \
--fields-terminated-by=, \
--local -u root \
-p Database \
TableName.csv
私は http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/で見つけました /
区切り文字をタブにするには、--fields-terminated-by='\t'
を使用します。
私が200以上の行をインポートした最も簡単な方法はphpmyadmin SQLウィンドウのコマンドの下にあります
2つの列CountryId、CountryNameを持つ単純な国のテーブルがあります。
これは.csvデータです。
これがコマンドです。
LOAD DATA INFILE 'c:/country.csv'
INTO TABLE country
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
2つ目の列には表示されないようにしてください。そうしないとインポートが停止します
問題は古いことを知っています 、しかし私はshare thisをしたいのですが
このメソッドを使用して、0.046秒に100Kを超えるレコード(〜5MB)をインポートしました
これを行う方法は次のとおりです。
LOAD DATA LOCAL INFILE
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);
複数のフィールドがある場合は、最後の行を含めることが非常に重要です。つまり、通常は最後のフィールドをスキップします(MySQL 5.6.17)。
LINES TERMINATED BY '\n'
(field_1,field_2 , field_3);
それで、あなたがあなたのフィールドのためにタイトルとして最初の行を持っていると仮定すると、あなたはこの行も含めたいと思うかもしれません。
IGNORE 1 ROWS
これはあなたのファイルにヘッダ行がある場合のように見えます。
LOAD DATA LOCAL INFILE
'c:/temp/some-file.csv'
INTO TABLE your_awesome_table
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS
(field_1,field_2 , field_3);
phpMyAdmin はCSVインポートを処理できます。手順は次のとおりです。
フィールドがMySQLテーブルフィールドと同じ順序になるようにCSVファイルを準備します。
CSVからヘッダー行を削除し(存在する場合)、データだけがファイルに含まれるようにします。
PhpMyAdminインターフェースに進みます。
左側のメニューでテーブルを選択します。
上部のインポートボタンをクリックします。
CSVファイルを参照してください。
[LOAD DATAを使用してCSV]オプションを選択します。
「で終わるフィールド」に「、」を入力します。
データベース表の場合と同じ順序で列名を入力してください。
実行ボタンをクリックすれば完了です。
これは私が私の将来の使用のために私が準備し、そして他の誰かが利益を得ることができるならばここで共有するというメモです。
あなたはあなたのLOAD DATAステートメントで列をリストすることによってこれを直すことができます。 マニュアルから :
LOAD DATA INFILE 'persondata.txt' INTO TABLE persondata (col1,col2,...);
...だからあなたの場合あなたはそれらがcsvファイルに現れる順番で99のカラムをリストする必要があります。
Mysqlのコマンドラインはインポート時に問題が多すぎます。これがあなたのやり方です。
これを試して、それは私のために働いた
LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 ROWS;
ここでIGNORE 1 ROWSはフィールド名を含む最初の行を無視します。ファイル名にはファイルの絶対パスを入力する必要があります。
私はなにか奇妙なことを見ます。あなたはESCAPINGにあなたがENCLOSINGに使ったのと同じ文字を使っています。だからエンジンは '"'を見つけたときに何をすべきかわからないし、それが正しい場所に何もないように見える理由だと私は思います。
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
あなたが(手動で、視覚的に...)あなたのCSVを分析し、どの文字がエスケープのために使うのか見つけない限り。時には '\'です。あなたがそれを持っていない場合でも、それを使用しないでください。
CSVに基づいてSQLのcreate/insertステートメントを生成するためのこのオンラインツールを試すこともできます。 http://www.convertcsvtomysql.com/ /
このツールについて私が好きなもの:
デメリット
さらに別の解決策は、すばらしい csvkit suiteの csvsql toolを使用することです。
使用例
csvsql --db mysql://$user:$password@localhost/$database --insert --tables $tablename $file
このツールは自動的にデータ型を推測し(デフォルトの動作)、テーブルを作成し、作成したテーブルにデータを挿入します。 --overwrite
オプションは既に存在する場合にテーブルを削除するために使用できます。 --insert
オプション - ファイルからテーブルを生成します。
pip install csvkit
前提条件: python-dev
、libmysqlclient-dev
、MySQL-python
apt-get install python-dev libmysqlclient-dev
pip install MySQL-python
サーバー名、ユーザー名、パスワード、データベース名、ファイルのパス、テーブル名、データベースに挿入するフィールドを変更します。
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "bd_dashboard";
//For create connection
$conn = new mysqli($servername, $username, $password, $dbname);
$query = "LOAD DATA LOCAL INFILE
'C:/Users/lenovo/Desktop/my_data.csv'
INTO TABLE test_tab
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(name,mob)";
if (!$result = mysqli_query($conn, $query)){
echo '<script>alert("Oops... Some Error occured.");</script>';
exit();
//exit(mysqli_error());
}else{
echo '<script>alert("Data Inserted Successfully.");</script>'
}
?>
ExcelスプレッドシートがロードされたWindowsマシンを使用している場合、Excel用の新しいmySqlプラグインは驚異的です。 Oracleの人々は、本当にそのソフトウェアに対していい仕事をした。データベース接続はExcelから直接行うことができます。そのプラグインはあなたのデータを分析し、データと一致するフォーマットであなたのためにテーブルをセットアップします。私は変換するデータのいくつかのモンスターの大きいcsvファイルを持っていました。このツールは大きな時間の節約になりました。
http://dev.mysql.com/downloads/windows/Excel/
データベースにオンラインで取り込まれるExcel内から更新を行うことができます。これは、超安価なGoDaddy共有ホスティングで作成されたmySqlファイルで非常にうまく機能しました。 (GoDaddyでテーブルを作成するときは、データベースへのオフサイトアクセスを有効にするためにいくつかの標準外設定を選択する必要があります。)
このプラグインを使用すると、XLスプレッドシートとオンラインのmySqlデータストレージとの間に純粋な対話性があります。
PHP mysqlデータベースへのインポートcsvファイルのクエリ
$query = <<<EOF
LOAD DATA LOCAL INFILE '$file'
INTO TABLE users
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(name,mobile,email)
EOF;
if (!$result = mysqli_query($this->db, $query))
{
exit(mysqli_error($this->db));
}
**サンプルCSVファイルデータ**
name,mobile,email
Christopher Gritton,570-686-3439,[email protected]
Brandon Wilson,541-309-5149,[email protected]
Craig White,516-795-8065,[email protected]
David Whitney,713-214-3966,[email protected]
これがExcelファイルのスクリーンショットのサンプルです。
名前を付けて保存し、.csvを選択します。
また、メモ帳++などのメモ帳を使用して開いた場合は、次のように.csvデータのスクリーンショットが表示されます。
Mysql Tableのように、ヘッダーを削除し、.csvの列の位置合わせを行ってください。 folder_nameをあなたのフォルダ名に置き換えてください。
LOAD DATA LOCAL INFILE
'D:/folder_name/myfilename.csv'で終了するテーブルメールフィールド '、'(fname、lname、email、phone);
ビッグデータの場合は、コーヒーを飲んでそれをロードすることができます。
それだけであなたは必要なのです。
CsvファイルをSQLテーブルにインポートする方法
サンプルファイル:Overseas_trade_index
data CSVファイル
ステップ:
overseas_trade_index
用のテーブルを作成する必要があります。
CSVファイルに関連する列を作成する必要があります。
SQLクエリ:
( id int not null primary key auto_increment,
series_reference varchar (60),
period varchar (60),
data_value decimal(60,0),
status varchar (60),
units varchar (60),
magnitude int(60),
subject text(60),
group text(60),
series_title_1 varchar (60),
series_title_2 varchar (60),
series_title_3 varchar (60),
series_title_4 varchar (60),
series_title_5 varchar (60),
);
ターミナルでMySQLデータベースに接続する必要があります。
=>show databases;
=>use database;
=>show tables;
Csvデータをmysqlテーブルにインポートするには、このコマンドを入力してください。
load data infile '/home/desktop/Documents/overseas.csv' into table trade_index fields terminated by ',' lines terminated by '\n' (series_reference,period,data_value,status,units,magnitude,subject,series_title1,series_title_2,series_title_3,series_title_4,series_title_5);
Sqldatabaseでこの海外貿易指数のデータを検索:
select * from trade_index;
Intellij https://www.jetbrains.com/datagrip/features/importexport.html を使用している場合
私は同じ仕事をするのにmysqlワークベンチを使います。
注意: "tail -f [mysqlworkbenchpath] /log/wb*.log"を使用して、mysqlワークベンチのログファイルでエラーを調べてください。