• 隐藏侧边栏
  • 展开分类目录
  • 关注微信公众号
  • 我的GitHub
  • QQ:1753970025
Chen Jiehua

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导入大量数据》

评论