我有一个来自客户端的非规范化事件日志(log)CSV,我正试图将其加载到MySQL表中,以便将其重构为合理的格式.我创建了一个名为"CSVImport"的表,该表中CSV文件的每一列都有一个字段.CSV包含99列,因此这本身就是一项非常艰巨的任务:
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);
表上没有约束,所有字段都包含VARCHAR(256)值,但包含计数(用INT表示)、是/否(用位表示)、价格(用十进制表示)和文本模糊(用文本表示)的列除外.
我试图将数据加载到文件中:
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 |
...
整张桌子上坐满了NULL
人.
我认为问题在于文本模糊包含不止一行,MySQL正在解析文件,好像每一行对应一个数据库行.我可以毫无问题地将文件加载到OpenOffice中.
客户数据.csv文件包含2593行和570条记录.第一行包含列名.我认为它是逗号分隔的,文本显然是用双引号分隔的.
更新:
如果有疑问,请阅读手册:http://dev.mysql.com/doc/refman/5.0/en/load-data.html
我在LOAD DATA
语句中添加了一些信息,OpenOffice非常聪明,可以推断,现在它加载了正确数量的记录:
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;
但仍然有很多NULL
条记录,而且加载的数据似乎都不在正确的位置.