我有一个包含超过100k记录的CSV文件,我需要将某些字段插入一个表中,其余字段插入另一个表中。
我知道我可以一个接一个地写两个LOAD DATA INFILE查询来获取它,我试过了,它也可以正常工作。但我想知道是否有可能做到以下几点:
这有可能吗?我知道MySQL中的并发性在系统上非常严重,但我想知道我的所有选择。
答案 0 :(得分:1)
LOAD DATA INFILE
无法进行行过滤。
但是,您可以使用grep
或awk
创建一个小型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
其他更好的方法是将所有数据加载到临时表中,并使用此表通过过滤器所需数据加载原始表中的数据。