62

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、かなり混乱しました。

このテキストファイルデータをインポートするにはどうすればよいですか?

4

9 に答える 9

78

それは次のように単純でなければなりません...

LOAD DATA INFILE '/tmp/mydata.txt' INTO TABLE PerformanceReport;

デフォルトでLOAD DATA INFILEは、タブで区切られ、1行に1行使用されるため、問題なく取り込むことができます。

于 2012-11-27T08:17:33.173 に答える
56

MySQLのLOADDATAコマンドの使用に関するチュートリアル:

  1. テーブルを作成します。

    CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4));
    
  2. タブ区切りファイルを作成します(列の間にタブがあることに注意してください)。

    1   Heart disease kills     1.2
    2   one out of every two    2.3
    3   people in America.      4.5
    
  3. loaddataコマンドを使用します。

    LOAD DATA LOCAL INFILE '/tmp/foo.txt' 
    INTO TABLE foo COLUMNS TERMINATED BY '\t';
    

    このコマンドを実行できないという警告が表示された場合は、--local-infile=1ここで説明されているパラメーターを有効にする必要があります。MySQLロードエラーを修正するにはどうすればよいですか。

  4. 行が挿入されます:

    Query OK, 3 rows affected (0.00 sec)
    Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
    
  5. それが機能したかどうかを確認します。

    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)
于 2014-01-03T01:50:38.040 に答える
15

テーブルがタブ以外で区切られている場合は、次のように指定する必要があります...

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
于 2012-11-27T11:24:12.013 に答える
4

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ユーティリティを使用してデータファイルをロードすることもできます。LOADDATAINFILEステートメントをサーバーに送信することで動作します

mysqlimport -u root -ptmppassword --local test employee.txt

test.employee: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0
于 2015-04-08T13:33:38.647 に答える
2

次のオプションを設定する必要があります。

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;
于 2018-01-17T12:45:52.033 に答える
1
LOAD DATA INFILE '/home/userlap/data2/worldcitiespop.txt' INTO TABLE cc FIELDS TERMINATED BY ','LINES TERMINATED BY '\r \n' IGNORE 1 LINES;
  • 1行を無視して、列名を含む最初のヘッダー行をスキップします
  • '、'で終了するフィールドは、コンマ区切りファイルを読み取るためのものです
  • Windowsシステムでテキストファイルを生成した場合、Windowsプログラムは通常2文字を行末記号として使用するため、ファイルを正しく読み取るためにLINES TERMINATED BY'\ r\n'を使用する必要がある場合があります。ワードパッドなどの一部のプログラムでは、ファイルを書き込むときに\rを行末記号として使用する場合があります。このようなファイルを読み取るには、LINES TERMINATEDBY'\r'を使用します。
于 2018-07-27T17:57:31.037 に答える
1

ここに画像の説明を入力してください

「LOCAL」キーワードを追加するだけでうまくいきました。簡単な解決策については、添付の画像を参照してください。

添付の画像には、次の両方の使用例が含まれています。

(a)このエラーが発生した場所。(b)「Local」キーワードを追加するだけでエラーが解決した場合。

于 2019-09-07T11:27:20.337 に答える
1
  1. Local-Infile変数がTrue(ON)に設定されていることを確認してください

    mysql> show global variables like 'local_infile';
    +---------------+-------+
    | Variable_name | Value |
    +---------------+-------+
    | local_infile  | OFF   |
    +---------------+-------+
    1 row in set (0.04 sec)
    
    mysql> set global local_infile=true;
    Query OK, 0 rows affected (0.01 sec)
    
  2. SQLテーブルにロードするためのtxtファイルを保存するための正しいパスを見つけます

    mysql>  SELECT @@GLOBAL.secure_file_priv;
    +------------------------------------------------+
    | @@GLOBAL.secure_file_priv                      |
    +------------------------------------------------+
    | C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\ |
    +------------------------------------------------+
    1 row in set (0.00 sec)
    
  3. パスからファイル内のデータを使用してロードします(パスで円記号を使用します)

mysql>  load data infile 'C:/ProgramData/MySQL/MySQL Server
8.0/Uploads/text_file.txt' into table TABLE_NAME fields terminated by '\t' lines terminated by '\n';
于 2021-11-17T07:16:17.140 に答える
0

1.タブ区切りのtxtファイルの場合:

LOAD DATA LOCAL INFILE'D:/MySQL/event.txt'INTOTABLEイベント

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

2.それ以外の場合:

LOAD DATA LOCAL INFILE'D:/MySQL/event.txt'INTOTABLEイベント

'x'で終了するフィールド(ここで、xはコンマ'、'、タブ'\ t'、セミコロン';'、スペース''の場合があります)

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

于 2018-03-16T21:40:43.417 に答える