MySql導入大數據

背景

客戶發來csv格式的文件,裏面包含了N多數據,需要將他們導入我們自己的數據庫。數據庫是MySql。值得注意的是:在數據特別大的時候用wps打開csv超出的數據是不會顯示的,這裏可以使用Snapde打開就不會有這種情況了。

執行導入

Navicat Premium 這個工具本身自帶導入功能,這裏不做贅述。因爲我的需求是在linux操作,且沒有開通shh所以一切只能靠命令存活。上代碼~~~

此處避個雷,當數據量龐大且存在主鍵自增的時候,加上有主從數據庫的時候,強烈強烈介意不要使用自增長,採用導入的主鍵。否則極大的可能造成死鎖~一直處於executing…mysql的死鎖機制,你懂得 特別是在沒辦法改變服務器配置的時候,你只能乾等着(此處也是我的血淚教訓,四五天了還卡在那)。

LOAD DATA INFILE 'C:/完整路徑(這裏不推薦使用中文路徑以及中文名,容易出問題)'
INTO TABLE 表名
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
lines terminated by '\r\n'  #部分會不識別\r\n,可以換成\n
ignore 1 lines  #當第一行不是表頭而是數據的時候可以省略這一句,這一句的意思是忽略第一行
(@1,name_, no_, time_, @2);#此處用的@1表示佔位,意思是第一列忽略不插入(根據自己需求寫)

還有需要注意的是,經常會出現編碼問題,這裏可以修改導入的文件的編碼,大致流程就是用記事本打開然後另存爲,在另存爲的頁面的左下角有一個格式編碼,選擇你需要的就行,我用的是utf8

當然,當數據量超級無敵大的時候記事本是打不開的,此處我用的方式是,是先建立一個utf8編碼的數據庫表,然後命令導入數據,再命令導出數據,雖然比較麻煩,但是確實是目前能想到的還不錯的方式了,而且用本文章的導入導出所花費的時間也不至於太長。

我導入了2500多萬條數據,大概花了170s相對我之前的笨操作來說可以說是很理想了。
在此記錄一下,以防忘記~~~

導出

加更~補充一下我導出的優秀時刻,比導入的速度快哦而且超級簡單,比工具導出的速度快了幾百倍!!!啦啦啦

SELECT * FROM 表名 into  outfile 'C:/地址-推薦英文地址' FIELDS TERMINATED BY ',';

導出一個億的數據只花了270s,萬歲!!!
在此之前先導入了1億多的數據,花了1100s,也算是比較理想了。

在這裏爲大家避個雷,導出時第一行不是表頭,請千萬記得不要自己用中文加一行(數據量比較大也不方便)可以直接將上面的腳本去掉忽略第一行的那句話,本人由於這個問題多加班三小時…暴走中…。

ignore 1 lines  #去掉這一句;

加更一波導出cvs數據導表頭的寫法

select * 
into  outfile 'C:/demo/demo.csv' FIELDS TERMINATED BY ','
lines terminated by '\n' from (select 'name','age','class'  union all select name_,age_,class_ from demo_ where age_>18  ) temp_table_;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章