我在MySQL中有一个包含5亿条记录的表。我想将此表导入Amazon DynamoDB。我知道有两种方法可以实现:
JAVA Api:这种方法的问题在于它很慢,有时也会丢失与数据库的连接。
亚马逊数据导入管道:似乎很有希望,但如何将数据从MySQL导出到DynamoDB识别的格式?
请让我在两者之间采取最佳方法。
答案 0 :(得分:7)
AWS有两项服务可以帮助您执行该操作。
数据管道
一种非常简单的方法 - 如果你的“模式”相似(我总是觉得谈论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
您可以通过开发执行导入和导出的单个管道来进一步改进此过程。如果需要在导入和导出之间转换数据,则需要开发转换代码并从管道中执行。
在数据管道术语中,这称为活动。活动可能像shell脚本一样简单,也可能像在EMR close上运行的Hive / Hadoop / Pig应用程序一样复杂。 http://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-concepts-activities.html
Data Pipeline还允许您定期安排执行。
Hive和EMR
Hive是一个编写SQL命令来操作数据源的hadoop工具。 Hive在集群上运行的Hadoop应用程序中转换SQL。 您可以在AWS Elastic Map Reduce Cluster(托管服务hadoop集群)上运行Hive。
EMR上的Hive可以连接到非关系数据源,例如S3或DynamoDB数据库上的文件。它允许您在DynamoDB上编写SQL语句!
在您的用例中,您需要编写一个可从MySQL读取并写入DynamoDB的Hive脚本。您可以使用标准(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
答案 1 :(得分:0)
除了其他答案,我想提一下,dynamodb会识别csv
或tsv
格式文件以进行导入。我们还可以使用Elastic Map Reduce的HIVE sql批量加载csv
文件中的数据。我们唯一需要考虑的是 - 如果我们使用窗口将表转储到csv
,那么我们必须确保将Windows系统\r\n
的行结尾替换为\n
以使其成为可能符合亚马逊。
答案 2 :(得分:0)
我发现对我来说,最简单的方法是编写一个脚本,以此处指定的格式将所有信息传输到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