程序员人生 网站导航

读大文件到mysql

栏目:数据库应用时间:2015-06-12 08:01:01

起初使用java读文件处理格式后存入数据库,运行后发现,效力太低太低,4G文本,4000多万行,估计需要30天左右才能完成处理。

数据格式:

每行->  XXXX ||| XXXXXXX ||| XXXXXXXXXXXXXXXXX

数据是严格结构化的,因此查询到1种直接从文件导入mysql的方法:

Load Data infile

参考文章:http://hunan.iteye.com/blog/752606

使用的指令以下:

load data infile '/home/lenovo/文档/NLPCC2015/auxiliary-data/NLPCC⑵015.Auxiliary.KB.Chinese' ignore into table detail_all character set utf8 fields terminated by ' ||| ' lines terminated by ' ' (`subject`,`predicate`,`value`);

根据[ ||| ]分割1行数据,分割成3段,然后每行根据 辨认,3段数据分别存入3个字段。

成功导入47943428 rows !

导入后发现每行结尾还有 存在,下面消除 符号

update detail_all set value = trim(TRAILING ' ' FROM `value`);

用trim消除开头和最后的符号。参考:http://nameyjj.blog.51cto.com/788669/621932

运行时报错:

Error Code: 2013. Lost connection to MySQL server during query 600.746 sec

查到解决方案:http://www.quora.com/How-can-I-solve-the-Error-Code⑵013-Lost-connection-to-MySQL-server-during-query⑹00⑴35-sec-error-message

即把超时的时间调大便可。

随后运行报错:

Error Code: 1205. Lock wait timeout exceeded; try restarting transaction

查到解决方案:http://blog.csdn.net/mchdba/article/details/38313881

我这里是回滚进程没有结束,等待其结束便可。


------分隔线----------------------------
------分隔线----------------------------

最新技术推荐