このタブ区切りデータを含むtext_file.txt
という名前の350MBのファイルがあります:
345868230 1646198120 1531283146 Keyword_1531283146 1.55 252910000
745345566 1646198120 1539847239 another_1531276364 2.75 987831000
...
MySQLデータベース名:Xml_Date
データベーステーブル:PerformanceReport
すべての宛先フィールドを持つテーブルを既に作成しました。
このテキストファイルデータをMySQLにインポートしたい。私はグーグルでLOAD DATA INFILE
のようないくつかのコマンドを見つけましたが、その使用方法についてはかなり混乱しています。
このテキストファイルデータをインポートするにはどうすればよいですか?
それは次のように単純でなければなりません...
LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;
デフォルトでは、LOAD DATA INFILE
はタブ区切りの行ごとに1行を使用するので、問題なく使用できます。
MySQLのLOAD DATAコマンドの使用に関するウォークスルー:
テーブルを作成します。
CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
タブ区切りファイルを作成します(列間にタブがあることに注意してください):
1 Heart disease kills 1.2
2 one out of every two 2.3
3 people in America. 4.5
Load dataコマンドを使用します。
LOAD DATA LOCAL INFILE '/tmp/foo.txt'
INTO TABLE foo COLUMNS TERMINATED BY '\t';
このコマンドを実行できないという警告が表示された場合、ここで説明されている--local-infile=1
パラメーターを有効にする必要があります。 MySQL Load Errorを修正する方法
行が挿入されます:
Query OK, 3 rows affected (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
動作したかどうかを確認します。
mysql> select * from foo;
+------+----------------------+-----------+
| myid | mymessage | mydecimal |
+------+----------------------+-----------+
| 1 | Heart disease kills | 1.2000 |
| 2 | one out of every two | 2.3000 |
| 3 | people in America. | 4.5000 |
+------+----------------------+-----------+
3 rows in set (0.00 sec)
テキストファイルの列を読み込む列を指定する方法:
このような:
LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
(@col1,@col2,@col3) set myid=@col1,mydecimal=@col3;
ファイルの内容は、変数@ col1、@ col2、@ col3に格納されます。 myidは列1を取得し、mydecimalは列3を取得します。これを実行すると、2行目が省略されます。
mysql> select * from foo;
+------+-----------+-----------+
| myid | mymessage | mydecimal |
+------+-----------+-----------+
| 1 | NULL | 1.2000 |
| 2 | NULL | 2.3000 |
| 3 | NULL | 4.5000 |
+------+-----------+-----------+
3 rows in set (0.00 sec)
テーブルがタブ以外で区切られている場合、次のように指定する必要があります...
LOAD DATA LOCAL
INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport
COLUMNS TERMINATED BY '\t' ## This should be your delimiter
OPTIONALLY ENCLOSED BY '"'; ## ...and if text is enclosed, specify here
LOAD DATA INFILEステートメントは、テキストファイルから行を非常に高速でテーブルに読み込みます。
LOAD DATA INFILE '/tmp/test.txt'
INTO TABLE test
FIELDS TERMINATED BY ','
LINES STARTING BY 'xxx';
データファイルが次のような場合:
xxx"abc",1
something xxx"def",2
"ghi",3
結果の行は( "abc"、1)と( "def"、2)になります。ファイルの3行目は、プレフィックスが含まれていないためスキップされます。
LOAD DATA INFILE 'data.txt'
INTO TABLE tbl_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
Mysqlimportユーティリティを使用してデータファイルをロードすることもできます。 LOAD DATA INFILEステートメントをサーバーに送信することにより動作します
mysqlimport -u root -ptmppassword --local test employee.txt
test.employee: Records: 3 Deleted: 0 Skipped: 0 Warnings: 0
オプションを設定する必要があります。
local-infile=1
my.cnfファイルの[mysql]エントリに追加するか、--local-infileオプションを使用してmysqlクライアントを呼び出します。
mysql --local-infile -uroot -pyourpwd yourdbname
「ローカルインファイル」機能サーバー側を有効にするには、同じパラメーターが[mysqld]セクションにも定義されていることを確認する必要があります。
これはセキュリティ上の制限です。
LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName;
1。タブ区切りのtxtファイルの場合:
LOAD DATA LOCAL INFILE 'D:/MySQL/event.txt' INTO TABLEイベント
'\ r\n'で終了した行。
2。そうでない場合:
LOAD DATA LOCAL INFILE 'D:/MySQL/event.txt' INTO TABLEイベント
FIELDS TERMINATED BY 'x'(ここでxはコンマ '、'、タブ '\ t'、セミコロン ';'、スペース '')
'\ r\n'で終了した行。
LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;