Tôi có một CSV nhật ký sự kiện không chuẩn hóa từ một máy khách mà tôi đang cố tải vào bảng MySQL để tôi có thể cấu trúc lại thành định dạng lành mạnh. Tôi đã tạo một bảng có tên 'CSVImport' có một trường cho mỗi cột của tệp CSV. CSV chứa 99 cột, vì vậy đây là một nhiệm vụ đủ khó:
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
Không có ràng buộc nào trên bảng và tất cả các trường giữ các giá trị VARCHAR (256), ngoại trừ các cột có chứa số đếm (được biểu thị bằng INT), có / không (được biểu thị bằng BIT), giá (được biểu thị bằng DECIMAL) và làm mờ văn bản ( đại diện bởi văn bản).
Tôi đã cố tải dữ liệu vào tập tin:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL | NULL | NULL |
...
Toàn bộ bàn được lấp đầy NULL
.
Tôi nghĩ vấn đề là các vệt mờ văn bản chứa nhiều hơn một dòng và MySQL đang phân tích tệp như thể mỗi dòng mới sẽ tương ứng với một hàng databazse. Tôi có thể tải tệp vào OpenOffice mà không gặp vấn đề gì.
Tệp clientdata.csv chứa 2593 dòng và 570 bản ghi. Dòng đầu tiên chứa tên cột. Tôi nghĩ rằng nó được phân cách bằng dấu phẩy và văn bản rõ ràng được phân định bằng doublequote.
CẬP NHẬT:
Khi nghi ngờ, hãy đọc hướng dẫn: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
Tôi đã thêm một số thông tin vào LOAD DATA
tuyên bố rằng OpenOffice đủ thông minh để suy luận và bây giờ nó tải đúng số lượng hồ sơ:
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Nhưng vẫn còn rất nhiều NULL
hồ sơ hoàn chỉnh , và không có dữ liệu nào được tải dường như được đặt đúng chỗ.