【问题标题】:Filter the data being loaded with MySQL LOAD DATA command使用 MySQL LOAD DATA 命令过滤正在加载的数据
【发布时间】:2011-03-03 06:03:41
【问题描述】:

我正在使用以下命令。

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

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

【问题讨论】:

    标签: mysql filter load


    【解决方案1】:

    不,至少LOAD DATA INFILE 不会。

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

    【讨论】:

      【解决方案2】:

      您可以让您的脚本创建一个临时文件,将 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);
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-18
        • 2012-06-16
        • 1970-01-01
        • 1970-01-01
        • 2014-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多