web-dev-qa-db-ja.com

コマンドライン経由でCSVをmysqlにインポートする

非常に大きな.csvファイル(〜4gb)をmysqlにインポートしようとしています。 phpmyadminの使用を検討していましたが、最大アップロードサイズは2 MBです。誰かが私にコマンドラインを使わなければならないと言った。

私はこれらの指示を使用してそれをインポートするつもりでした: http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html#c568

.csvテーブルの最初の行をmysqlテーブルの列名として設定するコマンドは何ですか?このオプションはphpmyadminを介して使用できるため、mysqlコマンドラインバージョンでもある必要があります。私を助けてください。ありがとうございました。

-ラージ

53
de1337ed

このコマンドを試してください

 load data local infile 'file.csv' into table table
 fields terminated by ','
 enclosed by '"'
 lines terminated by '\n'
 (column1, column2, column3,...)

ここでのフィールドは、データを格納する必要がある実際のテーブルフィールドです。で囲まれた行と終了した行はオプションであり、Excelエクスポートなどの二重引用符で囲まれた列がある場合に役立ちます。

詳細については、 manual を確認してください。

最初の行をテーブルの列名として設定するには、その行の読み取りを無視し、コマンドに値を追加します。

122
Balanivash

あなたがすることができます

mysqlimport --columns='head -n 1 $yourfile' --ignore-lines=1 dbname $yourfile`

つまり、ファイルがコンマで区切られており、セミコロンで区切られていない場合です。そうでない場合は、sedも必要になるかもしれません。

11

これを試して:

mysql -uusername -ppassword --local-infile scrapping -e "LOAD DATA LOCAL INFILE 'CSVname.csv'  INTO TABLE table_name  FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"
9
Rahul Arora

Mysqlimportを使用してヘッダー行を持つcsvをインポートするには、追加するだけです

--ignore-lines=N

(データファイルの最初のN行を無視します)

このオプションは、リンクしたページで説明されています。

5
Bjoern

単にインポートすることができます

mysqlimport --ignore-lines=1 --lines-terminated-by='\n' --fields-terminated-by=',' --fields-enclosed-by='"' --verbose --local -uroot -proot db_name csv_import.csv

注:Csvファイル名とテーブル名は同じである必要があります

2
Aravinthan K

次の方法で配置できます。

LOAD DATA LOCAL INFILE 'C:/Users/userName/Downloads/tableName.csv' INTO TABLE tableName FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

0
Daud Mabena

別のオプションは、csvkitライブラリのcsvsqlコマンドを使用することです。

コマンドラインで直接使用する例:

csvsql --db mysql:///test --tables yourtable --insert yourfile.csv

これは、コマンドラインで直接実行するか、複数のファイルに対してこれを行う必要がある場合に、自動化のためにpythonまたはシェルスクリプトに組み込むことができます。

csvsqlでは、csvの構造に基づいてオンザフライでデータベーステーブルを作成できるため、csvの最初の行を自動的にMySQLテーブルヘッダーとしてキャストするライトコードの方法です。

完全なドキュメントと詳細な例はこちら https://csvkit.readthedocs.io/en/1.0.3/scripts/csvsql.html

0
user1725872