![](/img/trans.png)
[英]AWS Data Pipeline DynamoDB to S3 to Redshift including JsonPaths
[英]AWS Data Pipeline, Best way to Structure Data in S3 for DynamoDB Mass Import?
我正在考虑将海量数据库迁移到Amazon的DynamoDB(考虑1.5亿条记录)。
我目前正在将这些记录存储在Elasticsearch中。
我正在阅读数据管道,您可以使用TSV,CSV或JSON文件从S3导入DynamoDB。
似乎最好的方法是使用JSON文件,我发现了两个有关其结构的示例:
{"Name"ETX {"S":"Amazon DynamoDB"}STX"Category"ETX {"S":"Amazon Web Services"}} {"Name"ETX {"S":"Amazon push"}STX"Category"ETX {"S":"Amazon Web Services"}} {"Name"ETX {"S":"Amazon S3"}STX"Category"ETX {"S":"Amazon Web Services"}}
来自卡路里的博客 :
{"Name": {"S":"Amazon DynamoDB"},"Category": {"S":"Amazon Web Services"}} {"Name": {"S":"Amazon push"},"Category": {"S":"Amazon Web Services"}} {"Name": {"S":"Amazon S3"},"Category": {"S":"Amazon Web Services"}}
因此,我的问题如下:
我想第一次做到这一点,而不会产生额外的费用,因为显然在设置正确或错误时会被收取费用。
我想念的手册的任何特定部分/链接也将不胜感激。
我现在正在做这件事。 实际上,我使用数据管道提取了3.4亿行,使用Lambda对其进行了转换,现在正使用管道导入它们。
有两件事:
1)JSON是一个不错的选择。
2)在导出时,AWS将每个文件限制为100,000条记录。 不知道这是必需的还是只是设计决定。
3)为了使用导入管道,需要有一个清单文件。 这对我来说是个新闻。 我有一个出口的例子,而您没有。 没有它,您的导入可能无法正常工作。 它的结构是:
{"name":"DynamoDB-export","version":3,
"entries": [
{"url":"s3://[BUCKET_NAME]/2019-03-06-20-17-23/dd3906a0-a548-453f-96d7-ee492e396100-transformed","mandatory":true},
...
]}
4)Calorious'Blog的格式正确。 我不确定“ S”是否需要小写-全部都是小写。 这是我的导入文件中的示例行:
{"x_rotationRate":{"s":"-7.05723"},"x_acceleration":{"s":"-0.40001"},"altitude":{"s":"0.5900"},"z_rotationRate":{"s":"1.66556"},"time_stamp":{"n":"1532710597553"},"z_acceleration":{"s":"0.42711"},"y_rotationRate":{"s":"-0.58688"},"latitude":{"s":"37.3782895682606"},"x_quaternion":{"s":"-0.58124"},"x_user_accel":{"s":"0.23021"},"pressure":{"s":"101.0524"},"z_user_accel":{"s":"0.02382"},"cons_key":{"s":"index"},"z_quaternion":{"s":"-0.48528"},"heading_angle":{"s":"-1.000"},"y_user_accel":{"s":"-0.14591"},"w_quaternion":{"s":"0.65133"},"y_quaternion":{"s":"-0.04934"},"rotation_angle":{"s":"221.53970"},"longitude":{"s":"-122.080872377186"}}
我将手动输入几行,然后使用数据管道将其导出,以查看其生成的确切格式; 然后,如果您要进行导入,则该格式将与您需要遵循的格式相同(我认为这是示例中的第一种格式)。
然后,我将建立一个包含几行(可能为100行)的文件,然后运行数据管道以确保其正常运行。
将文件分成多个片段对我来说听起来很不错,这可能会帮助您从故障中恢复而无需重新开始。
确保您没有具有空,空或未定义值的键。 这将中断并完全停止导入。 从当前数据库导出条目时,可以忽略不带任何值的键或将其设置为默认的非空值。
根据我的经验,我建议使用JSON作为最可靠的格式,当然,假设您生成的JSON Blob是格式正确的JSON对象(即正确的转义)。
如果您可以生成有效的JSON,那就走那条路!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.