【问题标题】:LOAD DATA INFILE for inserting data into two tables concurrently?LOAD DATA INFILE 用于同时向两个表中插入数据?
【发布时间】:2013-07-19 06:16:54
【问题描述】:

我有一个包含超过 10 万条记录的 CSV 文件,我需要将某些字段插入到一个表中,并将其余字段插入到另一个表中。

我知道我可以一个接一个地编写两个 LOAD DATA INFILE 查询来得到这个,我试过了,它也很好用。但我想知道是否可以执行以下操作:

  1. 从 csv 文件中读取一行。
  2. 取出某些记录,将它们插入表A。将剩余的插入表B。
  3. 阅读下一行。重复 2。

这可能吗?我知道 MySQL 中的并发对系统来说真的很累人,但我想知道我所有的选择。

【问题讨论】:

    标签: mysql csv file-io concurrency load


    【解决方案1】:

    行过滤器不适用于LOAD DATA INFILE

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

    cat file.txt |
      awk '/\t.+/' |
        mysql -u your_username -pyour_password \
          -e "LOAD DATA LOCAL INFILE '/dev/stdin' \
              IGNORE INTO TABLE table_name         \
              COLUMNS TERMINATED BY '\t'          \
              LINES TERMINATED BY '\n'            \
              (col1, col2);" \
          database_name
    

    其他更好的方法是将所有数据加载到临时表中,并使用该表通过过滤所需数据来加载原始表中的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 2015-04-17
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多