繁体   English   中英

AWS数据管道,在S3中为DynamoDB批量导入构建数据的最佳方法?

[英]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文件,我发现了两个有关其结构的示例:

  • 从AWS:

     {"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"}} 

因此,我的问题如下:

  • 我是否必须在文字上加上“ LINE of START(STX)”?
  • 这种方法的可靠性如何? 我应该担心上传失败吗? 似乎没有办法进行错误处理,所以我只是假设AWS正确吗?
  • 有理想的文件大小吗? 例如,我是否应该将数据库分解为10万条记录,并将每10万条存储在一个文件中?

我想第一次做到这一点,而不会产生额外的费用,因为显然在设置正确或错误时会被收取费用。

我想念的手册的任何特定部分/链接也将不胜感激。

我现在正在做这件事。 实际上,我使用数据管道提取了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM