2012-11-27 3 views
32

ich eine 350MB-Datei text_file.txt mit diesem Tabulator getrennte Daten benannt habe:Wie Daten aus Textdatei zu MySQL-Datenbank importieren

345868230 1646198120 1531283146 Keyword_1531283146 1.55 252910000 
745345566 1646198120 1539847239 another_1531276364 2.75 987831000 
... 

MySQL Datenbankname: Xml_Date

Datenbanktabelle: PerformanceReport

Ich habe die Tabelle bereits mit allen Zielfeldern erstellt.

Ich möchte diese Textdatei Daten in ein MySQL importieren. Ich googelte und fand einige Befehle wie LOAD DATA INFILE und ziemlich verwirrt, wie man es benutzt.

Wie kann ich diese Textdateidaten importieren?

Antwort

46

Es sollte so einfach sein ...

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

standardmäßig LOAD DATA INFILE verwendet begrenzt Registerkarte eine Zeile pro Zeile, so dass es in ganz gut nehmen.

+1

Wie kann der obige Code verstehen, in welcher Datenbank dieser Datensatz eingefügt wird? – LOKESH

+1

@LOKESH: In der Isolation kann es nicht. Zuvor müssen Sie mit dem USE-Befehl festlegen, welche Datenbank Sie verwenden. –

+0

Ich denke, die Datentabelle muss auch in der Datenbank erstellt werden, damit dies funktioniert? – HattrickNZ

11

Wenn Ihre Tabelle durch andere Personen als Tabs getrennt ist, sollten Sie es angeben, wie ...

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 
+0

können Sie Ihre Antwort plz erarbeiten? –

+1

Und könnten Sie "plz" die Dokumentation lesen? Die zwei zusätzlichen Parameter, die ich zu der akzeptierten Antwort hinzugefügt habe, sind in den Kommentaren definiert; mit einem #. – peixe

+1

Danke peixe. Sie haben uns bei [Here] (http://stackoverflow.com/a/38385192) – Drew

33

Prozess auf den Einsatz von MySQL LOAD DATA-Befehl:

  1. Tisch erstellen:

    CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4)); 
    
  2. Erstellen Sie Ihre Registerkarte Deli mited Datei (beachten Sie, es gibt Registerkarten zwischen den Spalten):

    1 Heart disease kills  1.2 
    2 one out of every two 2.3 
    3 people in America.  4.5 
    
  3. die Ladedaten Befehl:

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

    Wenn Sie eine Warnung erhalten, dass dieser Befehl nicht ausgeführt werden kann, dann haben Sie die --local-infile=1 Parameter hier beschrieben zu aktivieren: How can I correct MySQL Load Error

  4. die Zeilen eingefügt erhalten:

    Query OK, 3 rows affected (0.00 sec) 
    Records: 3 Deleted: 0 Skipped: 0 Warnings: 0 
    
  5. prüfen, ob es funktioniert:

    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) 
    

Wie festlegen, welche Spalten der Textdatei Spalten in laden:

So:

LOAD DATA LOCAL INFILE '/tmp/foo.txt' INTO TABLE foo 
FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' 
(@col1,@col2,@col3) set [email protected],[email protected]; 

Die Datei Inhalte werden in die Variablen @ col1, @ col2, @ col3 geschrieben. Myid erhält Spalte 1 und Mydecimal erhält Spalte 3.Wenn dies durchgeführt wurde, wäre es die zweite Reihe auslassen:

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) 
+0

geholfen. Auf meiner Version von MySQL (Ver 14.14 Distrib 5.5.41) musste ich LOCAL von diesen Befehlen weglassen. (ERROR 1148 (42000): Der verwendete Befehl ist bei dieser MySQL-Version nicht erlaubt.) – ManInTheArena

+0

Das Schlüsselwort LOCAL beeinflusst den erwarteten Speicherort der Datei und die Fehlerbehandlung. LOCAL funktioniert nur, wenn sowohl Ihr Server als auch Ihr Client so konfiguriert wurden, dass dies zulässig ist. https://dev.mysql.com/doc/refman/5.0/de/load-data.html –

3

Die Anweisung LOAD DATA INFILE liest Zeilen aus einer Textdatei in eine Tabelle mit einer sehr hohen Geschwindigkeit.

LOAD DATA INFILE '/tmp/test.txt' 
INTO TABLE test 
FIELDS TERMINATED BY ',' 
LINES STARTING BY 'xxx'; 

Wenn die Datendatei sieht wie folgt aus:

xxx"abc",1 
something xxx"def",2 
"ghi",3 

Die resultierenden Zeilen werden ("abc", 1) und ("def", 2). Die dritte Zeile in der Datei wird übersprungen, da sie das Präfix nicht enthält.

LOAD DATA INFILE 'data.txt' 
INTO TABLE tbl_name 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 

Sie können Datendateien auch mit dem Dienstprogramm mysqlimport laden. es funktioniert durch eine Anweisung LOAD DATA INFILE zum Server

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

test.employee: Records: 3 Deleted: 0 Skipped: 0 Warnings: 0 
0

Senden Sie die Option sollten: Ihre

local-infile=1 

in [mysql] Eintrag von my.cnf oder rufen Sie mysql-Client mit der - -local-infile Option:

mysql --local-infile -uroot -pyourpwd yourdbname 

Sie müssen sicher sein, dass der gleiche Parameter in Ihren [mysqld] zu Abschnitt definiert wird, um die "lokale infile" Feature Server-Seite zu ermöglichen.

Es ist eine Sicherheitsbeschränkung.

LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName;