队列SQL查询

时间:2017-04-29 19:49:49

标签: mysql csv import

我有一个数据集,已经分解为349个.csv文件。所有文件都存储在同一个文件夹中,文件中都有序列号。 (Recommendations-1.csv,Recommendations-2.csv,Recommendations-3.csv ...)

我使用以下命令导入文件,每个import语句中唯一更改的是文件号

LOAD DATA LOCAL INFILE '/Users/USERNAME/OneDrive/Data/EPC Register/Data Import Files/recommendations-1.csv' INTO TABLE {epc_reg {1}}

MySQL不支持使用变量来更改文件名。有没有办法按顺序运行这些查询,而不是手动等待一个导入完成,编辑查询并再次运行? (我很高兴创建相同的查询349次,只要我可以让它运行)。

1 个答案:

答案 0 :(得分:0)

假设您使用bash,这样做的方法是:

for filename in $(ls -l)
do
   mysql -e "LOAD DATA LOCAL INFILE '/Users/USERNAME/OneDrive/Data/EPC Register/Data Import Files/${filename}' INTO TABLEepc_reg FIELDS TERMINATED BY ',' ENCLOSED BY '""' LINES TERMINATED BY '\n' IGNORE 1 ROWS"
done

在此,来自for循环的文件名在mysql命令中与${filename}一起使用。

您必须观察'''的转义(因此可能需要进行一些调试),但其余部分应该可以正常工作。

翻译成batch

for %%f in (*.csv) do (
   mysql -e "LOAD DATA LOCAL INFILE '/Users/USERNAME/OneDrive/Data/EPC Register/Data Import Files/%%f' INTO TABLEepc_reg FIELDS TERMINATED BY ',' ENCLOSED BY '""' LINES TERMINATED BY '\n' IGNORE 1 ROWS"
)

甚至更好:

for %%f in (*.csv) do (
   mysql -e "LOAD DATA LOCAL INFILE '%%~ff' INTO TABLEepc_reg FIELDS TERMINATED BY ',' ENCLOSED BY '""' LINES TERMINATED BY '\n' IGNORE 1 ROWS"
)