我有一个来自客户机的非规范化事件日志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'结尾的字段