csv导入mysql_mysql导入超大csv指南
mysql導(dǎo)入超大csv指南
需求描述
手頭下載了一個(gè)比較大(400Mb+)的語(yǔ)料數(shù)據(jù),需要從里面提取出某兩種語(yǔ)言的句子對(duì),因?yàn)閿?shù)據(jù)特別大,且csv并非標(biāo)準(zhǔn)以逗號(hào)分隔而是以tab分隔,嘗試用Navicat的導(dǎo)入向?qū)?dǎo)入失敗。
另外以后也可能會(huì)有處理超大csv的場(chǎng)景,mark一下方法備用。
失敗方法
一開(kāi)始打算直接用Navicat進(jìn)行導(dǎo)入,嘗試了一下輸入向?qū)А_@里一個(gè)坑點(diǎn):如果你選擇csv格式,字段分隔符是不可選的,如下圖。
這時(shí)候可以在上一步就選擇文本txt,然后就可以自定義分隔符了,如下圖。
雖然但是這里也沒(méi)有tab(\t)的選項(xiàng),其他那里莫名其妙只能輸入一個(gè)字符,所以也輸入不了\t,嘗試直接下一步會(huì)一直卡住,雖然沒(méi)有顯示無(wú)響應(yīng)但是一直在處理中,等了半個(gè)小時(shí)也不管用,所以這個(gè)方法不行。
正確食用方法
實(shí)驗(yàn)環(huán)境:mysql 8.0 @ win10
使用Navicat進(jìn)行操作
實(shí)際上mysql是可以直接讀csv文件來(lái)進(jìn)行導(dǎo)入的,方法也超級(jí)簡(jiǎn)單。
首先需要放開(kāi)允許本地導(dǎo)入文件
SET GLOBAL local_infile = 'ON';看到下面執(zhí)行結(jié)果為OK就可以了,然后進(jìn)行導(dǎo)入。
LOAD DATA LOCAL INFILE 'PATH_TO_CSV_FILE' INTO TABLE TABLE_NAME FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'(FIELD1, FIELD2, ...);填入csv的路徑和表名,然后TERMINATED BY就是分隔符,后面LINE TERMINATED BY是每行結(jié)束的標(biāo)志,一般來(lái)說(shuō)是換行符\n,后面field就是數(shù)據(jù)庫(kù)中指定的字段。運(yùn)行以后,需要等待一段時(shí)間,這個(gè)時(shí)間取決于數(shù)據(jù)庫(kù)io速度了。我這里做了一次清空表再做導(dǎo)入,可能IO比較忙,用了快三分鐘,第一次導(dǎo)入的時(shí)候只用了78秒,速度還是蠻快的。另外這里也可以看到數(shù)據(jù)量蠻大的,一共800w+條。
其他處理超大csv的經(jīng)驗(yàn)
如果需要打開(kāi)一個(gè)超大的csv,千萬(wàn)不要用記事本(Notepad)打開(kāi),百分百卡死。
如果只需要進(jìn)行文本編輯,可以使用vscode,打開(kāi)很快,保存也比較快,但不方便進(jìn)行簡(jiǎn)單編輯以外其他操作。其次使用pycharm自帶的文本編輯器也能夠比較快地打開(kāi)超大的csv。也有推薦說(shuō)用UltraEdit之類(lèi)的打開(kāi)的,因?yàn)関scode現(xiàn)有,不再測(cè)試。
可以使用Excel的從csv導(dǎo)入的功能(在數(shù)據(jù)-從文本/csv),另外也可以選擇文件編碼(如utf-8)和分隔符,他也能夠自動(dòng)檢測(cè)(不太好用)。預(yù)覽一下沒(méi)問(wèn)題點(diǎn)加載即可。但是excel有行數(shù)限制(大概),反正這份超大的語(yǔ)料我就無(wú)法加載。
另外如果使用excel直接打開(kāi)utf-8編碼的csv會(huì)出現(xiàn)亂碼,因?yàn)閣in的默認(rèn)編碼是gbk(目前可以把win的全局編碼設(shè)置成utf-8,該設(shè)置在地區(qū)與語(yǔ)言里,但是開(kāi)啟后不支持utf-8編碼的軟件可能會(huì)出現(xiàn)文件夾亂碼、軟件界面亂碼等奇怪的情況,還是不能開(kāi)啟)。同時(shí)也無(wú)法識(shí)別逗號(hào)以外分隔符的csv。因此必須用導(dǎo)入的方法打開(kāi)。
總結(jié)
以上是生活随笔為你收集整理的csv导入mysql_mysql导入超大csv指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: des和aes相比较有哪些特点_栓流气力
- 下一篇: 阿里云 ecs mysql搭建_使用EC