2012-11-27 30 views
32

Tôi có một tập tin 350MB tên text_file.txt chứa tab này được phân định dữ liệu:Làm thế nào để nhập dữ liệu từ tập tin văn bản để cơ sở dữ liệu mysql

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

MySQL Database name: Xml_Date

bảng cơ sở dữ liệu: PerformanceReport

Tôi đã tạo bảng với tất cả các trường đích.

Tôi muốn nhập dữ liệu tệp văn bản này vào MySQL. Tôi googled và tìm thấy một số lệnh như LOAD DATA INFILE và khá bối rối về cách sử dụng nó.

Làm cách nào để nhập dữ liệu tệp văn bản này?

Trả lời

46

Nó phải là đơn giản như ...

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

Theo mặc định LOAD DATA INFILE sử dụng phân định tab, một hàng trên mỗi dòng, vì vậy nên mang nó trong tốt.

+1

cách mã trên có thể hiểu được cơ sở dữ liệu nào sẽ chèn bản ghi? – LOKESH

+1

@LOKESH: Trong sự cô lập, nó không thể. Trước đó, bạn sẽ cần phải thiết lập cơ sở dữ liệu nào bạn đang sử dụng với lệnh USE. –

+0

Tôi nghĩ rằng các datatable cần phải được tạo ra trong cơ sở dữ liệu cũng cho điều này để làm việc? – HattrickNZ

11

Nếu bảng của bạn được tách ra bởi những người khác hơn so với các tab, bạn nên xác định nó thích ...

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

bạn có thể xây dựng câu trả lời của bạn không? –

+1

Và bạn có thể "plz" đọc tài liệu không? Hai tham số phụ tôi thêm vào câu trả lời được chấp nhận được định nghĩa trong các chú thích; với một #. – peixe

+1

Cảm ơn peixe. Bạn đã giúp chúng tôi qua [Ở đây] (http://stackoverflow.com/a/38385192) – Drew

33

Walkthrough về việc sử dụng lệnh LOAD DATA MySQL:

  1. Tạo bảng của bạn:

    CREATE TABLE foo(myid INT, mymessage VARCHAR(255), mydecimal DECIMAL(8,4)); 
    
  2. Tạo tab deli của bạn tập tin mited (lưu ý có các tab giữa các cột):

    1 Heart disease kills  1.2 
    2 one out of every two 2.3 
    3 people in America.  4.5 
    
  3. Sử dụng lệnh tải dữ liệu:

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

    Nếu bạn nhận được một cảnh báo rằng lệnh này không thể chạy, sau đó bạn có để cho phép các tham số --local-infile=1 mô tả ở đây: How can I correct MySQL Load Error

  4. các hàng được chèn vào:

    Query OK, 3 rows affected (0.00 sec) 
    Records: 3 Deleted: 0 Skipped: 0 Warnings: 0 
    
  5. Kiểm tra nếu nó làm việc:

    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) 
    

Làm thế nào để xác định các cột để tải cột file văn bản của bạn vào:

Như thế này:

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]; 

Các tập tin nội dung được đưa vào các biến @ col1, @ col2, @ col3. myid lấy cột 1, và mydecimal lấy cột 3.Nếu điều này được chạy, nó sẽ bỏ qua hàng thứ hai:

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

Trên phiên bản MySQL của tôi (Ver 14.14 Distrib 5.5.41), tôi cần phải bỏ qua LOCAL khỏi các lệnh này. (ERROR 1148 (42000): Lệnh được sử dụng không được phép với phiên bản MySQL này) – ManInTheArena

+0

Từ khóa LOCAL ảnh hưởng đến vị trí mong muốn của tệp và xử lý lỗi. LOCAL chỉ hoạt động nếu máy chủ và máy khách của bạn đã được cấu hình để cho phép nó. https://dev.mysql.com/doc/refman/5.0/en/load-data.html –

3

Câu lệnh LOAD DATA INFILE đọc các hàng từ một tệp văn bản thành một bảng với tốc độ rất cao.

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

Nếu các tập tin dữ liệu trông như thế này:

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

Các hàng kết quả sẽ là ("abc", 1) và ("def", 2). Hàng thứ ba trong tệp bị bỏ qua vì nó không chứa tiền tố.

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

Bạn cũng có thể tải tệp dữ liệu bằng cách sử dụng tiện ích mysqlimport; nó hoạt động bằng cách gửi một LOAD DATA INFILE tuyên bố đến máy chủ

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

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

Bạn nên thiết lập các tùy chọn:

local-infile=1 

vào bạn [mysql] xâm nhập của my.cnf client tập tin hoặc gọi mysql với - -local-infile tùy chọn:

mysql --local-infile -uroot -pyourpwd yourdbname 

bạn phải chắc chắn rằng các thông số tương tự được xác định thành phần [mysqld] của bạn quá để cho phép các "địa phương infile" bên tính năng máy chủ.

Đó là hạn chế bảo mật.

LOAD DATA LOCAL INFILE '/softwares/data/data.csv' INTO TABLE tableName; 
Các vấn đề liên quan