【问题标题】:Selective Import from CSV to MySQL从 CSV 到 MySQL 的选择性导入
【发布时间】:2011-02-10 22:14:48
【问题描述】:

如何将大型 csv 文件中的某些行导入 MySQL 表。 我知道如何导入所有数据,但我的问题是我的 csv 文件太大,我不需要它拥有的所有数据。

我只想导入“COLUMN_X”具有以下任一值的行 [VALID1, VALID2, VALID3] 应忽略 column_x 具有无效值的所有其他行。

谁能帮我做这件事? 非常感谢。

【问题讨论】:

    标签: mysql csv import


    【解决方案1】:

    您无法使用 LOAD DATA INFILE 过滤掉行,因此要么通过预处理 CSV 文件过滤掉这些行,要么将数据加载到临时表中并将相关行插入主表中,例如;

    CREATE TEMP TABLE import LIKE my_main_table;
    LOAD DATA LOCAL INFILE 'myfile.csv' into import;
    INSERT INTO my_main_table SELECT * FROM import
                              WHERE column_x IN(VALID1, VALID2, VALID3)
    

    【讨论】:

      【解决方案2】:

      你可以使用类似的东西:

      LOAD DATA INFILE 'myfile.csv'
      INTO mytable
       (column1, @dummy, @dummy, column2, column3)
      

      这只会将第 1、4 和 5 列加载到数据库中。但是你需要提前知道你的“好”列在哪个位置。

      【讨论】:

        【解决方案3】:

        来自comments to mysql documentation的解决方案:

        CREATE TABLE your_table ( .....) 
        PARTITION BY LIST (COLUMN_X)
        (
           PARTITION main VALUE IN (VALID1, VALID2, VALID3)
        );
        LOAD DATA INFILE 'your_file.csv' IGNORE INTO your_table .....
        

        如果需要将数据追加到现有表中,可以按照上述方法新建一个临时表并将数据导入其中,然后INSERT INTO old_table SELECT * FROM your_table

        【讨论】:

          【解决方案4】:
          LOAD DATA INFILE 'filename' IGNORE
          INTO TABLE `table` (field1, field2, @pk, field3, @columnx)
          SET pk = IF (@columnx IN ('VALID1', 'VALID2', 'VALID3'), NULL, 'key'),
              COLUMN_X = @columnx
          
          • 如果在 CSV 中找到重复键,IGNORE 将忽略行。
          • (field1, field2, @pk, field3, @columnx) 是 CSV 列到值的映射。具体来说:CVS的第一个字段进入field1列,CVS的第二个字段进入field2列,CSV的第三个字段进入变量@pk等。
          • pk = 将名为 pk 的列设置为 = 后面的表达式的结果。在这种情况下,如果在 CSV 的第五列中遇到有效值之一,它会将列 pk 设置为 NULL。否则,它将该列设置为'key'

          如果pk 是保存主键的列,表已经有一条以'key' 作为主键的记录并且主键列设置为auto_increment,则此方法有效。

          【讨论】:

            猜你喜欢
            • 2013-05-06
            • 2011-10-09
            • 2014-08-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-13
            • 1970-01-01
            相关资源
            最近更新 更多