我有一个很大的数据库,其中存储了不同的事件。现在,我正在编写一个新程序,必须将数据从SQL数据库迁移到MYSQL数据库。
因此,我必须对不同的字段进行一些修改。例如,将日期和时间字段设置为datetimefield。因此,我首先计划使用php脚本,该脚本可用于其他较小的数据表。但是在事件表中,我大约有200.000行,这导致使用PHP处理时超时。
所以我决定使用bash脚本来使其工作。我仍然是bash脚本的初学者,我尝试过此操作来读取文件:
#!/bin/bash
export IFS=","
filename=events.csv
cat $filename | while read -r id eventkind name oert_dst1 oert_dst2 oert_dst3 eins_dst forces creator createdat editor editat datefromdate datefromtime datetodate datatotime city street oert note referto state owner verband staat verkehr wasser history einsltr;
do echo $id;
done
它按预期方式工作,并且读取文件的内容。
但是:
在“注释”字段中包含换行符的内容。脚本的结果是:
"VKA_ID"
134301
134306
Veranstalter: Stadt Fürstenfeldbruck"
134307
带有“ Veranstalter ....”的行是来自“ note”字段的内容。如果我在编辑器中打开csv文件,则还会有换行符。
对于导出,我使用了SQL-Developer的GUI,但找不到任何功能来避免此换行符。
有人知道吗?
P.S我忘了说。 PHP正确解析。我将文件读入数组,并且还有换行符,但在数组字段中。换行检测在这里正常工作。可惜我不能用PHP来处理那个大文件...
答案 0 :(得分:0)
但是在事件表中,我大约有200.000行,这导致使用PHP处理时超时。
您可以使用PHP,只需覆盖set-time-limit:
set_time_limit(20);
或使用ini_set:
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
这也可以在循环中完成,以“足够的时间”处理每个记录:
foreach ($rows as $row) {
set_time_limit(2);///allows 2 seconds per row
//process $row
}