使用MySQL LOAD DATA命令过滤正在加载的数据

时间:2011-03-03 06:03:42

标签: mysql filter load

我正在使用以下命令。

LOAD DATA  INFILE 'source.txt'
INTO TABLE tblData
CHARACTER SET utf8
FIELDS TERMINATED BY '\t';

这很好用,但是我得到的source.txt是一个800MB的文件,只有10%的行是我需要的。我无法在加载前对文本文件进行过滤。我可以根据一个特定列的值过滤我的结果。有没有办法可以在我的load语句中指定这个条件,所以只加载了所需的行。

2 个答案:

答案 0 :(得分:1)

不,至少不是LOAD DATA INFILE

但是,您可以创建一个解析文件的脚本,只插入符合条件的记录

答案 1 :(得分:1)

您可以让脚本创建一个临时文件,将LOAD DATA INFILE调用到临时文件中,然后将临时文件过滤到最终目标。

CREATE TEMPORARY FILE temp LIKE tblData;
LOAD DATA  INFILE 'source.txt'
    INTO TABLE temp
    CHARACTER SET utf8
    FIELDS TERMINATED BY '\t';
INSERT INTO tblData (field1, field2)
    (SELECT field1, field2 FROM temp WHERE some condition);

如果您的系统配置为确保临时文件保留在内存中,您仍应获得良好的性能。