起初使用java讀文件處理格式後存入數據庫,運行後發現,效率太低太低,4G文本,4000多萬行,估計需要30天左右才能完成處理。
數據格式:
每行-> XXXX ||| XXXXXXX ||| XXXXXXXXXXXXXXXXX
數據是嚴格結構化的,因此查詢到一種直接從文件導入mysql的方法:
Load Data infile
使用的指令如下:
load data infile '/home/lenovo/文檔/NLPCC2015/auxiliary-data/NLPCC-2015.Auxiliary.KB.Chinese' ignore into table detail_all character set utf8 fields terminated by ' ||| ' lines terminated by '\n' (`subject`,`predicate`,`value`);根據[ ||| ]分割一行數據,分割成三段,然後每行根據\n識別,三段數據分別存入三個字段。
成功導入47943428 rows !
導入後發現每行結尾還有\r存在,下面消除\r符號
update detail_all set value = trim(TRAILING '\r' FROM `value`);
用trim消除開頭和最後的符號。
運行時報錯:
Error Code: 2013. Lost connection to MySQL server during query 600.746 sec
即把超時的時間調大即可。
隨後運行報錯:
Error Code: 1205. Lock wait timeout exceeded; try restarting transaction
我這裡是回滾進程沒有結束,等待其結束即可。