如何将CSV文件导入MySQL表?

我有一个来自客户机的非规范化事件日志CSV,我正试图将其加载到MySQL表中,以便可以重构为正常格式。我创建了一个名为“CSVImport”的表,该表为CSV文件的每一列都有一个字段。CSV包含99列,因此这本身就是一项非常艰巨的任务:

创建表“CSVImport”(id INT);
ALTER TABLE CSVImport ADD列标题VARCHAR(256);
ALTER TABLE CSVImport ADD列Company VARCHAR(256);
ALTER TABLE CSVImport ADD列NumTickets VARCHAR(256);
...
ALTER表CSVImport Date49添加列Date49 VARCHAR(256);
ALTER表CSVImport Date50添加列Date50 VARCHAR(256);

表上没有约束,所有字段都包含VARCHAR(256)值,但包含计数(以INT表示)、是/否(以位表示)、价格(以十进制表示)和文本模糊(以文本表示)的列除外

我试图将数据加载到文件中:

将数据填充'/home/paul/clientdata.csv'加载到表CSVImport中;
查询正常,2023行受影响,65535条警告(0.08秒)
记录:2023已删除:0已跳过:0警告:198256
从CSVImport中选择*;
|空|空|空|空|空|
...

整个表中填充了NULL

我认为问题在于文本模糊包含不止一行,MySQL正在解析文件,好像每一行对应一个数据库行。我可以毫无问题地将文件加载到OpenOffice中

clientdata.csv文件包含2593行和570条记录。第一行包含列名。我认为它是逗号分隔的,文本显然是用双引号分隔的

更新:

如有疑问,请阅读手册:http://dev.mysql.com/doc/refman/5.0/en/load-data.html

我在LOAD DATA语句中添加了一些信息,OpenOffice非常聪明,可以推断,现在它加载了正确数量的记录:

加载数据填充/home/paul/clientdata.csv”
进入表CSVImport
以“,”结尾的列
可选地由“”括起
逃过
以“\n”结尾的行
忽略1行;

但是仍然有很多完全NULL记录,而且加载的数据似乎都不在正确的位置

使用mysqlimport将表加载到数据库中:

mysqlimport——忽略行=1\
--以=、结尾的字段\
--局部u根\
-p数据库\
TableName.csv

我在http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

要使分隔符成为选项卡,请使用--以='\t'结尾的字段

发表评论