按类型从DynamoDB删除项目

时间:2018-11-19 16:23:23

标签: amazon-dynamodb

我有一个DynamoDB表,其中一个属性上设置了TTL。但是,当我开始将数据提取到表中时,我不小心将属性作为字符串而不是整数输入。 TTL会将其忽略,并且我的记录从未被删除。

过了一会儿,我注意到我的错误并更新了代码,并且由于按计划删除记录,表的大小停止增长。但是我在表中仍然有几十万个记录,其中包含字符串TTL。

我删除这些记录的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我用boto3用python编写了一个脚本,该脚本扫描整个表,获取具有字符串TTL属性的项的键并将其删除。但是,删除〜500k项似乎很慢。因此,任何其他答案将不胜感激。

import boto3
dynamodb = boto3.resource('dynamodb')

table = dynamodb.Table('my-table')

response = table.scan()
data = response['Items']
while 'LastEvaluatedKey' in response:
    response = table.scan(ExclusiveStartKey=response['LastEvaluatedKey'])
    data.extend(response['Items'])

string_keys = [item['key'] for item in data if type(item['ttl']) == str]

with table.batch_writer() as batch:
    for key in string_keys:
        batch.delete_item(
            Key={
                'key': key
            },
    )
    string_keys.remove(key)