使用转换将DynamoDB表复制到另一个DynamoDB表

时间:2016-05-26 23:42:34

标签: amazon-web-services amazon-dynamodb amazon-data-pipeline

我有两个DynamoDB表:Table_1和Table_2。我正在尝试弃用Table_1并将信息从Table_1复制到Table_2中,Table_1具有不同的GSI和不同的LSI。

Table_1属性包括:Id,state,isReused,empty,normal

表_2属性为:UserId,Status,isOld,normal

Id映射到UserId,状态映射到状态,法线映射到正常,空白从Table_2中删除,如果状态为“OLD”,则isOld设置为true。

从Table_1导出此数据的最佳方法是什么,对属性/数据进行转换,然后将信息重新加载到Table_2中?

目前,我可以使用AWS Data Pipeline将Table_1中的数据导入/导出到具有给定模板的Table_2,但这不会进行转换。我猜我需要使用EMR来进行转换。

我还使用DynamoDB流来保持表同步,但根据我的理解,DynamoDB流只传输流更新的信息,而不是表中已存在的信息。

2 个答案:

答案 0 :(得分:4)

假设您只需要一次此数据移动,我可以考虑两个选项:

  • 在安装了Hive的情况下生成EMR集群。创建两个Hive表,分别在Table_1和Table_2上各一个。然后,执行类似'插入表_2从表_1中选择...'的操作。这将使您可以完全控制所需的转换。
  • 确实只有更新的项目和新项目才会发送到DynamoDB流。如果您已经设置了syncer,为什么不“更新”Table_1中的所有现有项目?只需向所有这些域添加一个虚拟字段,以便将它们推送到Table_1的流中,之后它们将自动复制到Table_2!只需确保您的syncer忽略此虚拟字段。这种方法的优点:
    • 将很好地处理竞争条件。
    • 根据您的业务逻辑,您可以快速检查Table_1中的项目是否已同步到Table_2。这使您可以自由复制Table_1中尚未在Table_2中更新的那些项目。

答案 1 :(得分:0)

您可以编写脚本来查询Table_1中的所有项目并使用Java进行转换,而不是使用Data Pipeline和编写EMR作业。在Java中进行转换后,如果条件不存在,则执行条件put [1]仅更新Table_2中的项目。这将确保在此回填期间在Table_1中所做的任何更改都将显示Table_2中的最新信息。

http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html