使用notepad++/excle快速將cvs文件轉換為insert語句技巧以及注意點
業務場景
最近nc項目經理從第三方弄來了一個300w行的csv文件,讓導入數據庫做處理,出現了下列問題:
csv文件中的字段分隔符,默認使用,
進行分隔的,insert的字段個數必須和插入字段的個數對應上,錯誤的原因就是:存儲的問題子當中,有用,
分隔的內容,導入的時候導致多一個字段,每次導入一部分就出錯。
注意事項/問題:
-
csv文件不能用excle編輯保存,編輯后,出現格式亂碼,可使用notepad++編輯保存;
-
拆分后的文件也不宜過大,否則進行字符替換的時候,編輯器會卡死;
-
由於使用轉為insert語句導入的原因,空字符串在導入的過程中容易出錯,所以講空用
""
或者''
將內容包含住; -
特被注意轉義字符,即
\+特殊字符
,在字段值末尾,導致sql語句結構破壞,sql語句不可用 -
文件過大,excle/notepad++均無法打開,使用linux工具對文件進行按行拆分
#將文件上傳到linux中,使用下面命令,total.csv為需要拆分的文件,company為拆分后的文件名 split -l 100000 total.csv company
一、使用notepad++轉換sql語句
1.使用正則表達是將最后一個行最后的字符替換為"
;
"$"找到最后一個字符;
2.將最后一個字符替換為);
,及sql語句的結束語句;這一步和上一步雖然都是在末尾插入,但是要分開,猜測應該是字符轉義的原因;
前兩步效果:
將,
替換為","
,因為csv文件中如果為空值,會直接用,
隔開,不會區分字段的分割,
將開頭換為"(
,記得要使用轉義字符,不然無法替換
再將開頭換為insert語句
,
最后結果:
二、使用excle替換
這次不用在意文件的格式,因為最后是保存sql語句,利用excle的公式在文檔最后一行插入公式,生成需要的sql語句
下面是公式
=CONCATENATE("INSERT INTO `new1_copy`(`DWMC`, `DWDZ`, `ZZJGDM`, `DWDH`, `DWDJ`, `DWXZ`, `XZQY`, `AQZRR`, `DWLX`, `AQZRRSFZ`, `AQZRRDH`, `JZMJ`, `DWZSX`, `GIS_X`, `GIS_Y`, `Deleted`) VALUES ('",A1,"','",B1,"','",C1,"','",D1,"','",E1,"','",F1,"','",G1,"','",H1,"','",I1,"','",J1,"','",K1,"','",L1,"','",M1,"','",N1,"','",O1,"','",P1,"');")
如果數據量很大,下拉很慢,雙擊公式單元格左下角:
會自動往下生成