加载解析txt文件中的数据到数据库(适合大量数据的情况)
将txt文本文件中的数据解析到数据库有很多种方式,比如不同的语言,java,python,shell等。
今天来介绍一种mysql自带的,快速加载txt文本中的数据,录入到数据库中的方法。
该方法适合导入大量数据的情况,博主亲测,加载一个拥有400多万条数据的txt文本到数据库仅需1-2分钟。
具体方式如下(此处写成在shell函数配置加载的方式):
function loadAndStore{
#$1 表示调用函数时传入的参数,此处代表文件路径
if test -f $1; then
#database_name表示你的数据库名,username表示用户名,password表示密码(去掉单引号)
mysql -u'username' -p'password' database_name <<eof
load data infile "$1"
#table_name表示你的表名
into table table_name
#此处将 ^ 替换成你的txt文件中的列分隔符
fields terminated by '^'
#此处将 \n 替换成你的txt文件中的行分隔符
lines terminated by '\n'
(@id, @name, @create_time)
set
id=@id,
name=@name,
create_time=@create_time;
eof
else
echo"文件不存在"
fi
}
#path表示加载文件的路径
loadAndStore "path"
若是txt文件字段值之间还有分隔符,例如字段值前后都加了 ‘|’ 字符,可利用mysql的substring函数和char_length函数进行切割字符,如:
function loadAndStore{
#$1 表示调用函数时传入的参数,此处代表文件路径
if test -f $1; then
#database_name表示你的数据库名,username表示用户名,password表示密码(去掉单引号)
mysql -u'username' -p'password' database_name <<eof
load data infile "$1"
#table_name表示你的表名
into table table_name
#此处将 ^ 替换成你的txt文件中的列分隔符
fields terminated by '^'
#此处将 \n 替换成你的txt文件中的行分隔符
lines terminated by '\n'
(@id, @name, @create_time)
set
id=substring(@id,2,char_length(@id)-2),
name=substring(@name,2,char_length(@name)-2),
create_time=substring(@create_time,2,char_length(@create_time)-2);
eof
else
echo"文件不存在"
fi
}
#path表示加载文件的路径
loadAndStore "path"