CSV数据导入和数据处理

时间:2013-12-06 09:55:24

标签: mysql csv

我必须定期将CSV中的数据导入MySQL数据库。

LOAD DATA LOCAL INFILE '/path/to/file.csv' INTO TABLE `tablename` FIELDS TERMINATED BY ','

我导入的数据没有主键列,同样我也无法改变CSV文件的结构,因为我无法控制它。

所以我需要将这个CSV数据导入一个临时的MySQL表,这很好,但是我需要获取这些数据并逐行处理。当每一行都在一个进程中运行时,我需要从临时表中删除该行,以便我不重新处理它。

因为临时表没有主键我不能做 DELETE FROM tablename WHERE id = X 这是最好的选择,而是我必须匹配一堆字母数字列(可能最多5个,以避免意外删除重复项。)

或者我认为我可以在CSV导入过程完成后更改表格并添加主键列,然后按照前面的说明处理数据。然后,完成后,再次更改表以删除准备进行新导入的主键列。有人可以告诉我这是不是一个愚蠢的想法?什么是最有效和最快速的?

非常感谢任何想法或建议!

1 个答案:

答案 0 :(得分:3)

您可以从头开始在临时表中添加auto_increment列,并在加载数据时填充值

CREATE TEMPORARY TABLE tablename
(
  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  col1 INT,
  col2 VARCHAR(32),
  col3 INT,
  ...
);

然后在括号中指定所有列,但保留id

LOAD DATA LOCAL INFILE '/path/to/file.csv' 
INTO TABLE `tablename` 
FIELDS TERMINATED BY ','
(col1, col2, col3,...); -- specify all columns, but leave id out

这样,您无需在导入前后添加和删除id列。由于您定期进行导入,因此在完成导入以清除表格并重置TRUNCATE列后,您可以考虑使用永久表而不是临时表,只需id。 / p>