猿学~如何将 JSON, Text, XML, CSV 数据文件导入 MySQL

将外部数据导入(import)数据库是在数据库应用中一个很常见的需求。其实这就是在数据的管理和操作中的ETL (Extract, transform, load)的L (Load)部分,也就是说,将特定结构(structure)或者格式(format)的数据导入某个目的地(比如数据库,这里我们讨论MySQL)。

  本文要讨论的内容,是如何方便地将多种格式(JSON, Text, XML, CSV)的数据导入MySQL之中。

  本文大纲:

  1. 将Text文件(包括CSV文件)导入MySQL

  2. 将XML文件导入MySQL

  3. 将JSON文件导入MySQL

  4. 使用MySQL workbench的Table Data Export and Import Wizard进行JSON或CSV文件的导入导出

 1. 将Text文件(包括CSV文件)导入MySQL

  这里我们的讨论是基于一个假定,Text file和CSV file是有着比较规范的格式的(properly formatted),比如说每行的每个数据域(field)之间是由一个共同的分隔符(比如tab: \t)分隔的。

  那么首先,你需要根据你的数据的格式(有哪些域),来设计好数据库的对应的表 (的Schema)。

  举个例子,要处理的Text文件或者CSV文件是以\t作为分隔符的,每行有id, name, balance这么三个数据域,那么首先我们需要在数据库中创建这个表:

1

CREATETABLEsometable(id INT,nameVARCHAR(255), balance DECIMAL(8,4));

  创建成功以后就可以导入了。操作方式很简单:

1

LOADDATALOCALINFILE'你的文件路径(如~/file.csv)'INTOTABLE sometable FIELDS TERMINATED BY'\t'[ENCLOSED BY'"'(可选)] LINES TERMINATED BY'\n'(id, name, balance)

  这里要注意的是,我们需要开启local-infile这个MySQL的配置参数,才能够成功导入。究其原因,从MySQL的Manual中可以看到这么一段话:

LOCAL works only if your server and your client both have been configured to permit it. For example, if mysqld was started with --local-infile=0, LOCAL does not work. See Section 6.1.6, “Security Issues with LOAD DATA LOCAL”.

  这是MySQL出于安全考虑的默认配置。因此,我们需要在配置文件my.cnf中(以Debian发行版的Linux, 如Ubuntu为例, 即是在/etc/my.cnf中),确保:

1

local-infile=1

  抑或是在命令行启动MySQL时加上--local-infile这一项:

1

mysql--local-infile -uroot -pyourpwd yourdbname

  此外,我们也可以使用MySQL的一个官方导入程序 mysqlimport,这个程序本质上就是为LOAD DATA FILE提供了一个命令行的interface,很容易理解,我们这里就不再详述。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值