我正在使用以下命令。
LOAD DATA INFILE 'source.txt'
INTO TABLE tblData
CHARACTER SET utf8
FIELDS TERMINATED BY '\t';
这很好用,但是我得到的source.txt是一个800MB的文件,只有10%的行是我需要的。我无法在加载前对文本文件进行过滤。我可以根据一个特定列的值过滤我的结果。有没有办法可以在我的load语句中指定这个条件,所以只加载了所需的行。
答案 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);
如果您的系统配置为确保临时文件保留在内存中,您仍应获得良好的性能。