将数据从 MySQL 复制到 Amazon DynamoDB
Copying data from MySQL to Amazon DynamoDB
我在 MySQL 中有一个 table,包含 5 亿条记录。我想将此 table 导入亚马逊 DynamoDB.I 了解有两种方法:
JAVA Api: 这种方法的问题是它很慢,而且有时会断开与数据库的连接。
Amazon Data Import Pipeline:看起来很有希望,但是如何将数据从 MySQL 导出为 DynamoDB 识别的格式?
请告诉我两者之间最好的方法。
AWS 有两个服务可以帮助您执行该操作。
- 数据管道
- 带有 Hive 的 EMR 集群
数据管道
一个非常简单的方法 - 如果你的 "schemas" 相似(我总是觉得谈论 DynamoDB 的模式很尴尬) - 从 MySQL 导出到 S3,然后从 S3 导入到 DynamoDB。
Data Pipeline 有两个教程可以帮助您设置任务
http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-copydata-mysql.html
http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-importexport-ddb-part1.html
您可以通过开发执行导入和导出的单个管道来进一步改进此过程。如果您需要在导入和导出之间转换数据,您将需要开发转换代码并从管道中执行它。
在数据管道术语中,这就是调用 Activity。 activity 可能像 shell 脚本一样简单,也可能像 EMR closer 上的 Hive / Hadoop / Pig 应用程序 运行 一样复杂。
http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-concepts-activities.html
Data Pipeline 还可以让您安排定期执行。
Hive 和 EMR
Hive 是一种 hadoop 工具,用于编写 SQL 命令来操作数据源。 Hive 在集群上 运行 的 Hadoop 应用程序中翻译 SQL。
您可以 运行 Hive on AWS Elastic Map Reduce Cluster(托管服务 hadoop 集群)。
EMR 上的 Hive 可以连接到非关系数据源,例如 S3 或 DynamoDB 数据库上的文件。它允许您在 DynamoDB 之上编写 SQL 语句!
在您的用例中,您需要编写一个 Hive 脚本来读取 MySQL 并写入 DynamoDB。您可以使用标准 (Hive) SQL 表达式转换数据。
有关 EMR 上的 Hive 的更多信息:
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hive.html
更多关于 DynamoDB 和 Hive 的信息:
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Walkthrough.html
http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMRforDynamoDB.html
除了其他答案,我想提一下 dynamodb 识别 csv
或 tsv
格式的文件来导入。我们还可以使用 HIVE sql 使用 Elastic Map Reduce 从 csv
文件批量加载数据。我们唯一需要考虑的是 - 如果我们使用 windows 将 table 转储到 csv
那么我们必须确保 windows 系统的行结束 \r\n
替换为 \n
以使其与亚马逊兼容。
我发现对我来说最简单的方法是编写一个脚本,以此处指定的格式将所有信息传输到 json 文件中:AWS Load Data
{
"ProductCatalog": [
{
"PutRequest": {
"Item": {
"Id": {
"N": "101"
},
"Title": {
"S": "Book 101 Title"
},
"ISBN": {
"S": "111-1111111111"
},
"Authors": {
"L": [
{
"S": "Author1"
}
]
},
"Price": {
"N": "2"
},
"Dimensions": {
"S": "8.5 x 11.0 x 0.5"
},
"PageCount": {
"N": "500"
},
"InPublication": {
"BOOL": true
},
"ProductCategory": {
"S": "Book"
}
}
}
},
{
"PutRequest": {
"Item": {
"Id": {
"N": "103"
},
"Title": {
"S": "Book 103 Title"
},
"ISBN": {
"S": "333-3333333333"
},
"Authors": {
"L": [
{
"S": "Author1"
},
{
"S": "Author2"
}
]
},
"Price": {
"N": "2000"
},
"Dimensions": {
"S": "8.5 x 11.0 x 1.5"
},
"PageCount": {
"N": "600"
},
"InPublication": {
"BOOL": false
},
"ProductCategory": {
"S": "Book"
}
}
}
},
{
"PutRequest": {
"Item": {
"Id": {
"N": "205"
},
"Title": {
"S": "18-Bike-204"
},
"Description": {
"S": "205 Description"
},
"BicycleType": {
"S": "Hybrid"
},
"Brand": {
"S": "Brand-Company C"
},
"Price": {
"N": "500"
},
"Color": {
"L": [
{
"S": "Red"
},
{
"S": "Black"
}
]
},
"ProductCategory": {
"S": "Bicycle"
}
}
}
}
]
}
然后从我的控制台
创建表和 运行 代码
aws dynamodb batch-write-item --request-items file://ProductCatalog.json
下载并配置aws cli:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.CLI.html
如果您有像 PhpMyAdmin 这样的门户网站,您可以轻松地导出 您的数据到 JSON 格式。
接下来您手动创建 table。
最后,使用 Dynabase 您可以将 JSON 个文件导入 DynamoDB tables。尽管 Dynabase 是一个商业工具,但它确实解锁了所有必需的功能,即使使用试用许可证也是如此。
MySQL JSON 导出有时还存储有关 table 的附加信息。如有必要,我会手动编辑文件以仅保留文件的 data-portion。我导入的 JSON 文件的根目录中有一个数组,例如
[
{ "id": 1 , "foo" : "bar" },
{ "id": 361, "foo" : "baz" }
]
您可能不需要转换数据格式。
我在 MySQL 中有一个 table,包含 5 亿条记录。我想将此 table 导入亚马逊 DynamoDB.I 了解有两种方法:
JAVA Api: 这种方法的问题是它很慢,而且有时会断开与数据库的连接。
Amazon Data Import Pipeline:看起来很有希望,但是如何将数据从 MySQL 导出为 DynamoDB 识别的格式?
请告诉我两者之间最好的方法。
AWS 有两个服务可以帮助您执行该操作。
- 数据管道
- 带有 Hive 的 EMR 集群
数据管道
一个非常简单的方法 - 如果你的 "schemas" 相似(我总是觉得谈论 DynamoDB 的模式很尴尬) - 从 MySQL 导出到 S3,然后从 S3 导入到 DynamoDB。
Data Pipeline 有两个教程可以帮助您设置任务
http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-copydata-mysql.html http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-importexport-ddb-part1.html
您可以通过开发执行导入和导出的单个管道来进一步改进此过程。如果您需要在导入和导出之间转换数据,您将需要开发转换代码并从管道中执行它。
在数据管道术语中,这就是调用 Activity。 activity 可能像 shell 脚本一样简单,也可能像 EMR closer 上的 Hive / Hadoop / Pig 应用程序 运行 一样复杂。 http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-concepts-activities.html
Data Pipeline 还可以让您安排定期执行。
Hive 和 EMR
Hive 是一种 hadoop 工具,用于编写 SQL 命令来操作数据源。 Hive 在集群上 运行 的 Hadoop 应用程序中翻译 SQL。 您可以 运行 Hive on AWS Elastic Map Reduce Cluster(托管服务 hadoop 集群)。
EMR 上的 Hive 可以连接到非关系数据源,例如 S3 或 DynamoDB 数据库上的文件。它允许您在 DynamoDB 之上编写 SQL 语句!
在您的用例中,您需要编写一个 Hive 脚本来读取 MySQL 并写入 DynamoDB。您可以使用标准 (Hive) SQL 表达式转换数据。
有关 EMR 上的 Hive 的更多信息: http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/emr-hive.html
更多关于 DynamoDB 和 Hive 的信息: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMRforDynamoDB.Walkthrough.html http://docs.aws.amazon.com/ElasticMapReduce/latest/DeveloperGuide/EMRforDynamoDB.html
除了其他答案,我想提一下 dynamodb 识别 csv
或 tsv
格式的文件来导入。我们还可以使用 HIVE sql 使用 Elastic Map Reduce 从 csv
文件批量加载数据。我们唯一需要考虑的是 - 如果我们使用 windows 将 table 转储到 csv
那么我们必须确保 windows 系统的行结束 \r\n
替换为 \n
以使其与亚马逊兼容。
我发现对我来说最简单的方法是编写一个脚本,以此处指定的格式将所有信息传输到 json 文件中:AWS Load Data
{
"ProductCatalog": [
{
"PutRequest": {
"Item": {
"Id": {
"N": "101"
},
"Title": {
"S": "Book 101 Title"
},
"ISBN": {
"S": "111-1111111111"
},
"Authors": {
"L": [
{
"S": "Author1"
}
]
},
"Price": {
"N": "2"
},
"Dimensions": {
"S": "8.5 x 11.0 x 0.5"
},
"PageCount": {
"N": "500"
},
"InPublication": {
"BOOL": true
},
"ProductCategory": {
"S": "Book"
}
}
}
},
{
"PutRequest": {
"Item": {
"Id": {
"N": "103"
},
"Title": {
"S": "Book 103 Title"
},
"ISBN": {
"S": "333-3333333333"
},
"Authors": {
"L": [
{
"S": "Author1"
},
{
"S": "Author2"
}
]
},
"Price": {
"N": "2000"
},
"Dimensions": {
"S": "8.5 x 11.0 x 1.5"
},
"PageCount": {
"N": "600"
},
"InPublication": {
"BOOL": false
},
"ProductCategory": {
"S": "Book"
}
}
}
},
{
"PutRequest": {
"Item": {
"Id": {
"N": "205"
},
"Title": {
"S": "18-Bike-204"
},
"Description": {
"S": "205 Description"
},
"BicycleType": {
"S": "Hybrid"
},
"Brand": {
"S": "Brand-Company C"
},
"Price": {
"N": "500"
},
"Color": {
"L": [
{
"S": "Red"
},
{
"S": "Black"
}
]
},
"ProductCategory": {
"S": "Bicycle"
}
}
}
}
]
}
然后从我的控制台
创建表和 运行 代码aws dynamodb batch-write-item --request-items file://ProductCatalog.json
下载并配置aws cli:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Tools.CLI.html
如果您有像 PhpMyAdmin 这样的门户网站,您可以轻松地导出 您的数据到 JSON 格式。
接下来您手动创建 table。
最后,使用 Dynabase 您可以将 JSON 个文件导入 DynamoDB tables。尽管 Dynabase 是一个商业工具,但它确实解锁了所有必需的功能,即使使用试用许可证也是如此。
MySQL JSON 导出有时还存储有关 table 的附加信息。如有必要,我会手动编辑文件以仅保留文件的 data-portion。我导入的 JSON 文件的根目录中有一个数组,例如
[
{ "id": 1 , "foo" : "bar" },
{ "id": 361, "foo" : "baz" }
]
您可能不需要转换数据格式。