将CSV文件中的数据导入Amazon Web Services RDS MySQL数据库

4

我已经在Amazon Web Services上创建了一个关系型数据库(MySQL)。接下来,我想把本地CSV文件中的数据导入到这个数据库中。如果有人能提供一个大致的步骤,我会非常感激。谢谢!

4个回答

10

使用MySQL命令行是最简单和最轻松的方法。对于大量数据,考虑启动一个新的EC2实例,安装MySQL CL工具,并将文件传输到该机器上。然后,在通过CL连接到数据库之后,您可以执行以下操作:

mysql> LOAD DATA LOCAL INFILE 'C:/upload.csv' INTO TABLE myTable;

此外,还有匹配您文件详细信息和忽略标题的选项(文档中还有更多内容)

mysql> LOAD DATA LOCAL INFILE 'C:/upload.csv' INTO TABLE myTable FIELDS TERMINATED BY ','
ENCLOSED BY '"' IGNORE 1 LINES;

如果您不确定是否使用CL,请下载MySQL Workbench。它可以轻松连接到AWS RDS。

结束语:

  • MySQL LOAD DATA文档
  • AWS的Aurora RDS也支持MySQL,因此命令在那里也有效
  • "LOCAL"标志实际上是将文件从客户端机器(运行命令的地方)传输到DB服务器。 没有LOCAL,则文件必须在DB服务器上(不可能提前在RDS中转移文件)
  • 对于大文件也非常适用!使用此方法发送了一个8.2GB的文件(260百万行)。 从t2-medium EC2到db.t2.small Aurora花费了10个多小时
  • 如果需要注意唯一键或按行读取CSV并在插入/更新之前更改数据,则不是解决方案

2

我进行了一些调查,找到了这份官方AWS文档,介绍如何将任何来源的数据导入到托管在RDS上的MySQL中。

这是一份非常详细的、逐步指南,并包括有关如何导入CSV文件的说明。

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.AnySource.html

基本上,每个表必须有自己的文件。多个表的数据不能合并在同一个文件中。给每个文件与其对应的表相同的名称。文件扩展名可以是任何你喜欢的东西。例如,如果表名为“sales”,文件名可以是“sales.csv”或“sales.txt”,但不能是“sales_01.csv”。

尽可能按照正在加载的表的主键对数据进行排序。这极大地提高了加载时间并最小化了磁盘存储要求。

还有另一种选项将数据导入到MySQL数据库,您可以使用外部工具Alooma,在实时中为您执行数据导入。


还有MySQL Workbench。 - Robot Head

1
根据文件大小不同,如果文件小于1GB,则我发现DataGrip可以轻松导入。https://www.jetbrains.com/datagrip/您将获得漂亮的映射工具和图形IDE供使用。DataGrip可作为30天免费试用版提供。
我自己使用大于2GB的文件时遇到了RDS连接中断问题。不确定是DataGrip还是AWS方面的问题。

enter image description here


0

我认为你最好的选择是使用你选择的语言开发一个脚本来连接数据库并导入数据。

如果你的数据库可以从互联网访问,那么你可以在本地运行该脚本。如果它在私有子网中,则可以在具有访问私有子网权限的EC2实例上运行该脚本,或者在连接到您的VPC的Lambda上运行该脚本。如果你预计运行时间少于5分钟左右,那么你应该只使用Lambda。

编辑:请注意,Lambda仅支持少数几种语言

AWS Lambda支持使用Node.js(JavaScript),Python,Java(Java 8兼容版本)和C#(.NET Core)编写的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接