将数据从 CSV 文件导入 Amazon Web Services RDS MySQL 数据库
Posted
技术标签:
【中文标题】将数据从 CSV 文件导入 Amazon Web Services RDS MySQL 数据库【英文标题】:Import data from CSV file to Amazon Web Services RDS MySQL database 【发布时间】:2017-11-14 10:43:27 【问题描述】:我创建了一个托管在 Amazon Web Services 上的关系数据库 (mysql)。接下来我想做的是,将我本地 CSV 文件中的数据导入到这个数据库中。如果有人向我提供如何去做的大纲,我将不胜感激。谢谢!
【问题讨论】:
【参考方案1】:通过使用 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 Docs AWS 的 Aurora RDS 与 MySQL 兼容,因此命令也适用于那里 “LOCAL”标志实际上将文件从客户端计算机(运行命令的位置)传输到数据库服务器。如果没有 LOCAL,文件必须在数据库服务器上(无法使用 RDS 提前将其传输到那里) 也适用于大文件! 刚刚通过这种方法发送了一个 8.2GB 的文件(2.6 亿行)。从 t2-medium EC2 到 db.t2.small Aurora 只用了 10 多个小时 如果您需要注意唯一键或逐行读取 CSV 并在插入/更新之前更改数据,这不是一个解决方案【讨论】:
【参考方案2】:我进行了一些挖掘,并找到了有关如何将数据从任何来源导入到托管在 RDS 上的 MySQL 的官方 AWS 文档。
这是一个非常详细的分步指南,并包含有关如何导入 CSV 文件的说明。
http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/MySQL.Procedural.Importing.AnySource.html
基本上,每个表都必须有自己的文件。多个表的数据不能合并到同一个文件中。为每个文件指定与其对应的表相同的名称。文件扩展名可以是任何你喜欢的。例如,如果表名是“sales”,则文件名可以是“sales.csv”或“sales.txt”,但不能是“sales_01.csv”。
尽可能按正在加载的表的主键对数据进行排序。这极大地缩短了加载时间并最大限度地减少了磁盘存储需求。
import data to MySQL database还有一个选择,你可以使用外部工具Alooma,可以实时为你导入数据。
【讨论】:
【参考方案3】:取决于您的文件有多大,但如果小于 1GB,我发现 DataGrip 导入较小的文件没有任何问题:https://www.jetbrains.com/datagrip/ 你会得到很好的映射工具和图形 IDE 来玩。 DataGrip 可免费试用 30 天。
我正在经历 RDS 连接丢失,文件较大,例如 > 2GB。不确定是关于 DataGrip 还是 AWS 方面。
【讨论】:
【参考方案4】:我认为最好的办法是用你选择的语言开发一个脚本来连接到数据库并导入它。
如果您的数据库可以通过 Internet 访问,那么您可以在本地运行该脚本。如果它位于私有子网中,那么您可以在可以访问私有子网的 EC2 实例上或在连接到您的 VPC 的 lambda 上运行该脚本。如果您预计运行时间少于 5 分钟左右,您真的应该只使用 lambda。
编辑:请注意,lambda 仅支持少数几种语言
AWS Lambda 支持用 Node.js (javascript)、Python、Java 编写的代码 (Java 8 兼容)和 C# (.NET Core)。
【讨论】:
以上是关于将数据从 CSV 文件导入 Amazon Web Services RDS MySQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何将抓取的数据从 Scrapy 以 csv 或 json 格式上传到 Amazon S3?