删除 Dynamodb 表中具有重复值的项目

use*_*468 1 amazon-dynamodb

我有一个具有以下结构的 dynamodb 表:

{  
  accountId: string,//PRIMARY KEY 
  userId: string,//SORT KEY
  email: string,
  dateCreated: number // timestamp
}
Run Code Online (Sandbox Code Playgroud)

我想执行一项操作,从表中删除具有重复电子邮件的所有项目,但具有最旧 dateCreated 属性的项目除外。

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

谢谢

not*_*est 5

首先,您需要分区键和排序键才能从 DynamoDB 中删除项目。除非,您知道accountIdand userId,否则您无法执行删除项目操作。

在上述用例中,无论是email还是dateCreated属性都不是关键属性的一部分。

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

方法一:-

如果是一次性活动,则首选

  1. 获取数据并根据dateCreated客户端识别旧值
  2. 根据accountId和删除DynamoDB上的数据userId

方法2:-

如果经常需要,首选一个

  1. 创建一个具有哈希键作为email和排序键作为的 GSIdateCreated

  2. 假设您知道要查询的电子邮件 ID 并确定它是否有重复项,您可以使用索引名称、电子邮件 ID 值和值为 false(即降序)的Query APIScanIndexForward

结果集的顶部将包含带有最新记录的电子邮件 ID。您可以忽略上面记录并运行删除APIaccountIduserId为项目的其余部分。

方法三:-

如果数据可以在平面文件中管理并运行一些程序来查找重复项,则首选方法

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

方法4:-

数据量大时的首选方法

  1. 您可以使用 AWS Data Pipeline 将数据导出到 AWS EMR
  2. 运行一些查询以查找重复项并执行 DynamoDB 删除查询以删除项目

笔记:-

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

将数据导出到 S3