【问题标题】:Queue SQL Queries队列 SQL 查询
【发布时间】:2017-04-29 19:49:49
【问题描述】:

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

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

LOAD DATA LOCAL INFILE '/Users/USERNAME/OneDrive/Data/EPC Register/Data Import Files/recommendations-1.csv' INTO TABLEepc_reg FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n' IGNORE 1 ROWS

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

【问题讨论】:

  • 你可以写一个小批处理文件来做增量。或者只是将所有文件添加到一个文件中并运行一次

标签: mysql csv import


【解决方案1】:

假设您使用 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"
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-02
    • 1970-01-01
    • 2018-06-30
    • 2015-04-12
    • 2012-12-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多