我有一个来自客户端的非标准化事件日志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表示),是/否(以BIT表示),价格(以DECIMAL表示)和文本框()的列除外。由TEXT表示)。
我试图将数据加载到文件中:
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正在解析文件,好像每一行都对应于一个databazse行。我可以毫无问题地将文件加载到OpenOffice中。
clientdata.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
记录,而且似乎都没有在正确的位置加载任何数据。