5

awk を使用して stdout で csv を生成しています。その内容をファイルに入れずに mysql に直接インポートする方法はありますか?

4

5 に答える 5

12

@xdazzからの答えが言うように、単に使用してLOAD DATA LOCAL INFILEください。無知または怠惰から反対票を投じられたと思います。MySQL のマニュアルをざっと読んでみると、それが完全に実行可能な答えであることがわかります。

2016 年と、ほとんどのユーザーにとって最も関連性の高い MariaDB の場合、次のようにします。

bash awk '{ /* My script that spits out a CSV */ }' | mysql --local-infile=1 -u user -ppassword mydatabase -e "LOAD DATA LOCAL INFILE '/dev/stdin' INTO TABLE mytable FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"';"

明らかに、マニュアルを読んで、LOAD DATA INFILE特定のケースに合わせて必要に応じてオプションを変更してください。

于 2016-08-12T16:38:52.843 に答える
1

stdinからCSVを直接インポートできないようです。mysqlがその名前をテーブルの名前(拡張子なし)として使用するようにファイルに保存する必要があります。次のようにmysqlimportを使用できます。

mysqlimport -uUSER -pPASS DB FILE

于 2013-01-28T11:55:02.357 に答える
0

@xdazzは私よりも速かったですが、結果をファイルに入れることを検討したいと思います。なんで?そうすることで、問題が発生した場合に、問題を確認して追跡することができます。これは、断続的な問題に直面した場合に、常に発生するとは限らない場合に非常に役立ちます。もちろん、ディスク容量を節約するために、インポートが完了したら、消費しすぎないようにZIPで圧縮します。

于 2012-10-19T06:45:15.960 に答える
-3

はい、パイプを使用してください。

$ your_command | mysql -u ユーザー -p

申し訳ありませんが、この回答では不十分です。csv を mysql に直接パイプすることはできません。結果を有効なSQLにするために、追加の作業を行う必要があります。

load data infileまたは、データベースへの csv ファイルのロードをサポートするmysql ネイティブ構文の使用を検討することもできます。

于 2012-10-19T06:41:59.320 に答える