Удалить элементы из DynamoDB по типу - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть таблица DynamoDB с TTL , установленным для одного из атрибутов. Однако когда я начал вводить данные в таблицу, я случайно вводил атрибут в виде строки, а не целого числа. TTL игнорирует это, и мои записи никогда не удалялись.

Через некоторое время я заметил свою ошибку и обновил код, и таблица перестала расти в размере, поскольку записи удалялись в соответствии с планом. Однако у меня все еще есть несколько сотен тысяч записей в таблице со строкой TTL.

Как мне лучше всего удалить эти записи?

1 Ответ

0 голосов
/ 19 ноября 2018

Я написал скрипт на Python с boto3, который сканирует всю таблицу, получает ключи для элементов со строковыми атрибутами TTL и удаляет их.Однако удаление элементов размером ~ 500 тыс. Кажется довольно медленным.Поэтому любые другие ответы будут высоко оценены.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...