使用MySQL LOAD data命令筛选正在加载的数据

使用MySQL LOAD data命令筛选正在加载的数据,mysql,filter,load,Mysql,Filter,Load,我正在使用以下命令 LOAD DATA INFILE 'source.txt' INTO TABLE tblData CHARACTER SET utf8 FIELDS TERMINATED BY '\t'; 这很好,但是我得到的source.txt是一个800MB的文件,只有我所需要的10%的行。我无法在加载前对文本文件进行过滤。我可以根据一个特定列的值筛选结果。是否有一种方法可以在load语句中指定此条件,以便只加载所需的行。否,至少不能使用load DATA INFILE 但是,您可以

我正在使用以下命令

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

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

否,至少不能使用
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);
如果您的系统配置为确保临时文件保留在内存中,则仍应获得良好的性能