2017-03-10 38 views
0

我有以下结构的dynamodb表:在Dynamodb表重复删除的项目值

{ 
    accountId: string,//PRIMARY KEY 
    userId: string,//SORT KEY 
    email: string, 
    dateCreated: number // timestamp 
} 

我想执行删除与除了一个从表中重复的电子邮件的所有项目的操作最早的dateCreated属性。

在DynamoDB中可以执行此操作吗?

感谢

回答

2

首先,您需要同时分区和排序键从DynamoDB删除一个项目。除非您知道accountIduserId,否则无法执行删除项目操作。

在上述用例中,emaildateCreated属性都不是关键属性的一部分。

此外,排序功能仅适用于排序关键属性。

方法1: -

首选之一,如果它是一个一次活动

  1. 获取数据,并在客户端识别基于dateCreated旧值
  2. 删除DynamoDB上的数据基于accountIduserId

方法2: -

优选的,如果它经常需要

  • 与散列密钥作为email和排序关键字作为dateCreated

    创建GSI
  • 假设您知道要查询的电子邮件ID并确定它是否有重复项,可以使用带有索引的查询API名称,电子邮件ID值和ScanIndexForward值为假(即,降序)

  • 结果集的电子邮件ID将在最上方有最新记录。您可以忽略顶部记录并针对其余项目运行删除APIaccountIduserId

    方法3: -

    首选的方法,如果数据能够在平面文件管理和运行一些程序,找出重复

    1. 可以使用AWS数据将数据导出到S3桶管道
    2. 运行一些程序来读取文件以查找重复项并执行DynamoDB删除查询以删除项目

    方法4: -

    首选的方法,如果该数据是大

    1. 可以使用AWS数据管道
    2. 运行一些查询,找到重复和执行将数据导出到AWS EMR DynamoDB删除查询删除的项目

    注: -

    请注意,如果你期待像SQL与子查询来识别最新更新的记录,并删除其余,这是上DynamoDB

    Export data to S3

    可能