使用转换将 DynamoDB table 复制到另一个 DynamoDB table
Copying DynamoDB table to another DynamoDB table with transforms
我有两个 DynamoDB table:Table_1 和 Table_2。我正在尝试弃用 Table_1 并将信息从 Table_1 复制到 Table_2,后者具有不同的 GSI 和不同的 LSI。
Table_1属性有:Id,state,isReused,empty,normal
Table_2属性有:UserId、Status、isOld、normal
Id 映射到 UserId,state 映射到 status,normal 映射到 normal,empty 从 Table_2 中删除,如果状态是 "OLD" 那么 isOld 设置为 true。
从 Table_1 导出此数据的最佳方法是什么,对 attributes/data 进行转换,然后将信息加载回 Table_2?
目前,我可以使用 AWS Data Pipeline 将 import/export 从 Table_1 到 Table_2 的数据与给定的模板一起使用,但这不会进行转换。我猜我需要使用 EMR 来进行转换。
我还使用 DynamoDB 流来保持 table 同步,但据我了解,DynamoDB 流仅流式传输更新的信息,而不是 table 中已存在的信息。
假设你只需要一次这个数据移动,我可以想到两个方案:
- 生成一个安装了 Hive 的 EMR 集群。创建两个 Hive 表,在 Table_1 和 Table_2 上各一张。然后,执行类似 'insert into Table_2 select ... from Table_1' 的操作。这将使您能够完全控制所需的转换。
- 确实只有更新的和新的项目被发送到 DynamoDB 流。如果您已经设置了同步器,为什么不 'update' Table_1 中的所有现有项目一次?只需为所有这些添加一个虚拟字段,以便将它们推送到 Table_1 的流,之后它们将自动复制到 Table_2!只需确保您的同步器忽略此虚拟字段即可。这种方法的优点:
- 将很好地处理竞争条件。
- 根据您的业务逻辑,您可以快速检查 Table_1 中的项目是否已同步到 Table_2。这使您可以自由地仅复制 Table_1 中尚未在 Table_2 中更新的那些项目。
您可以编写一个脚本来查询 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)
我有两个 DynamoDB table:Table_1 和 Table_2。我正在尝试弃用 Table_1 并将信息从 Table_1 复制到 Table_2,后者具有不同的 GSI 和不同的 LSI。
Table_1属性有:Id,state,isReused,empty,normal
Table_2属性有:UserId、Status、isOld、normal
Id 映射到 UserId,state 映射到 status,normal 映射到 normal,empty 从 Table_2 中删除,如果状态是 "OLD" 那么 isOld 设置为 true。
从 Table_1 导出此数据的最佳方法是什么,对 attributes/data 进行转换,然后将信息加载回 Table_2?
目前,我可以使用 AWS Data Pipeline 将 import/export 从 Table_1 到 Table_2 的数据与给定的模板一起使用,但这不会进行转换。我猜我需要使用 EMR 来进行转换。
我还使用 DynamoDB 流来保持 table 同步,但据我了解,DynamoDB 流仅流式传输更新的信息,而不是 table 中已存在的信息。
假设你只需要一次这个数据移动,我可以想到两个方案:
- 生成一个安装了 Hive 的 EMR 集群。创建两个 Hive 表,在 Table_1 和 Table_2 上各一张。然后,执行类似 'insert into Table_2 select ... from Table_1' 的操作。这将使您能够完全控制所需的转换。
- 确实只有更新的和新的项目被发送到 DynamoDB 流。如果您已经设置了同步器,为什么不 'update' Table_1 中的所有现有项目一次?只需为所有这些添加一个虚拟字段,以便将它们推送到 Table_1 的流,之后它们将自动复制到 Table_2!只需确保您的同步器忽略此虚拟字段即可。这种方法的优点:
- 将很好地处理竞争条件。
- 根据您的业务逻辑,您可以快速检查 Table_1 中的项目是否已同步到 Table_2。这使您可以自由地仅复制 Table_1 中尚未在 Table_2 中更新的那些项目。
您可以编写一个脚本来查询 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)