MySQL导入大量数据
最近在做一些数据统计,每天的数据量在千万级别,存储在文件中,需要整理后导入到MySQL。
用python写了脚本,对数据进行整理汇总后数据量仍然在百万级别,如果只是简单的使用insert到MySQL中,那效率将是一个大问题。找了一下MySQL大数据导入,发现LOAD DATA INFILE是一个很不错的方式。
使用方法
参考官方文档:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [CHARACTER SET charset_name] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number LINES] [(col_name_or_user_var,...)] [SET col_name = expr,...]
- REPLACE | IGNORE
对现有的唯一键记录的重复的处理:指定replace,新行将代替有相同的唯一键值的现有行;指定ignore,跳过有唯一键的现有行的重复行的输入。如果没有指定任何一个选项,当找到重复键时,将会出现错误并终止导入操作。
- FIELDS
TERMINATED BY:字段间的分隔符,默认:\t;
ENCLOSED BY:字段括起字符;
ESCAPED BY:字段转义字符;
- LINES
TERMINATED BY:每一行的分隔符,默认:\n;
在未指定FIELDS | LINES时,等价于:
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' STARTING BY ''
遇到的问题
file_name无论是给出了绝对路径还是放到mysql目录下,都提示file not found;
网上给的解决方案是加上 LOCAL 参数;
可是加上了LOCAL参数后提示:ERROR 1148 (42000): The used command is not allowed with this MySQL version;
解决方案:登陆的时候加上–local-infile,即:mysql –local-infile -u user -p passwd
码字很辛苦,转载请注明来自ChenJiehua的《MySQL导入大量数据》
评论