我有一个来自客户端的非规范化事件日志(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条记录,而且加载的数据似乎都不在正确的位置.

推荐答案

问题的核心似乎是将CSV文件中的列与表中的列相匹配.

很多图形化的mySQL客户端都有很好的导入对话框.

我最喜欢的工作是基于Windows的HeidiSQL.它提供了一个图形界面来构建LOAD DATA命令;以后可以通过编程方式重新使用它.

Import textfile

Screenshot: "Import textfile" dialog

要打开"导入文本文件"对话框,请转到Tools > Import CSV file:

enter image description here

Mysql相关问答推荐

如何在SQLAchemy for MYSQL中将字面量转换为表达?

try 使用TypeORM创建新表时出现SQL语法错误

MySQL添加表会将&@@&qot;追加到表名

比较2个mysql json数据类型列

Mysql:使用like Select 查询

MySQL - 密码哈希没有预期的格式

MySQL - 事务绑定多个存储过程调用和回滚的简单方法?

为大表优化 Django 模型

我在连接到 mysql 的 node js 中收到错误消息发送到客户端后无法设置标头

按优先级 for each 具有 status_id 的员工 Select 单行

为什么order by子句可以利用索引?

如何使用 SQL 聚合和求和相似 Select 的值?

判断一对记录是否属于多个组ID

用于国际和多语言目的的数据库建模

按日期和时间降序排序?

一次查询 MySQL 插入多行

MySQL 中的 VARCHAR(255) 和 TINYTEXT 字符串类型有什么区别?

使用 mysqldriver 连接数据库时出错

PHP mySQL - 将新记录插入表中,主键自动递增

数据截断:第 1 行的logo列数据太长