我有一个DynamoDB表,其中一个属性上设置了TTL。但是,当我开始将数据提取到表中时,我不小心将属性作为字符串而不是整数输入。 TTL会将其忽略,并且我的记录从未被删除。
过了一会儿,我注意到我的错误并更新了代码,并且由于按计划删除记录,表的大小停止增长。但是我在表中仍然有几十万个记录,其中包含字符串TTL。
我删除这些记录的最佳方法是什么?
答案 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)