【问题标题】:How to skip columns in CSV file when importing into MySQL table using LOAD DATA INFILE?使用 LOAD DATA INFILE 导入 MySQL 表时如何跳过 CSV 文件中的列?
【发布时间】:2011-01-09 11:47:40
【问题描述】:

我有一个包含 11 列的 CSV 文件,我有一个包含 9 列的 MySQL 表。

CSV 文件如下所示:

col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11

MySQL 表如下所示:

col1, col2, col3, col4, col5, col6, col7, col8, col9

我需要将 CSV 文件的第 1-8 列直接映射到 MySQL 表的前 8 列。然后我需要跳过 CSV 文件中接下来的两列,然后将 CSV 文件的第 11 列映射到 MySQL 表的第 9 列。

目前我正在使用以下 SQL 命令:

LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
FIELDS TERMINATED BY ','
ENCLOSED BY ''
LINES TERMINATED BY '\n'

但是上面的代码将CSV文件的前9列映射到MySQL表中的9列。

【问题讨论】:

    标签: mysql csv load-data-infile


    【解决方案1】:

    From Mysql docs:

    您还可以通过以下方式丢弃输入值 将其分配给用户变量和 不将变量分配给表 专栏:

    LOAD DATA INFILE 'file.txt'  
    INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
    

    【讨论】:

    • 仅供参考:我必须将 (column1, @dummy, column2... 字段语句添加到示例 SQL 的末尾。最初我直接在表名之后添加它,如上例所示,但我一直收到 MySQL 错误。
    • 谁能告诉我如何忽略@dummy
    • 您至少需要FIELDS TERMINATED BY ',' 才能避免“第 1 行不包含所有列的数据”
    • 如果您的 CSV 文件有标题行,请添加 IGNORE 1 LINES。
    • @StevePitchers 这表明serverfault.com/questions/96401/… 是什么意思,IGNORE 1 LINES 后面是圆括号,在圆括号内列出了所有列?
    【解决方案2】:

    step1.处理 awk。

    cat file.txt |awk '{print $1,$2,$5...}'>new_file.txt
    

    step2.load 到 mysql。

    load data local infile 'new_file' into table t1(...)
    

    下面的方法很简单,但在低版本的mysql中是不允许的。

    LOAD DATA INFILE 'file.txt'  
    INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
    

    【讨论】:

    • 我喜欢在这里使用 awk 来展示将多个工具链接在一起的美感。
    • 谁能告诉我如何忽略@dummy
    【解决方案3】:

    @deemi:

    忽略@dummy 的唯一方法是将字段的默认设置为AUTO INCREMENT。 所以你可以跳过这个字段,只写这样的代码,

    LOAD DATA INFILE 'file.txt'  
    INTO TABLE t1 (column2, column3, column4, column5);
    

    //假设字段名column1默认设置为AUTO INCREMENT。

    【讨论】:

      【解决方案4】:

      我认为代码还有一个变化:

      以下 SQL 命令:

      LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
      FIELDS TERMINATED BY ','
      ENCLOSED BY ''
      LINES TERMINATED BY '\n'
      

      -可能会导致数据截断错误。

      所以最好使用LINES TERMINATED BY '\r\n' 而不是LINES TERMINATED BY '\n'

      所以代码将是:

      LOAD DATA LOCAL INFILE 'filename.csv' INTO TABLE my_table
      FIELDS TERMINATED BY ','
      ENCLOSED BY ''
      LINES TERMINATED BY '\r\n'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-28
        • 1970-01-01
        • 1970-01-01
        • 2021-10-02
        • 2013-09-25
        • 2013-05-03
        • 2015-03-11
        相关资源
        最近更新 更多