LOAD DATA INFILE用于同时将数据插入两个表中?

时间:2013-07-19 06:16:54

标签: mysql csv file-io concurrency load

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

我知道我可以一个接一个地写两个LOAD DATA INFILE查询来获取它,我试过了,它也可以正常工作。但我想知道是否有可能做到以下几点:

  1. 从csv文件中读取一行。
  2. 获取某些记录,将其插入表A中。将剩余的记录插入表B中。
  3. 阅读下一行。重复2.
  4. 这有可能吗?我知道MySQL中的并发性在系统上非常严重,但我想知道我的所有选择。

1 个答案:

答案 0 :(得分: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

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