Почему при создании таблицы не удается создать удаленную таблицу DynamoDB? - PullRequest
1 голос
/ 10 февраля 2020

У меня есть простая таблица в DynamoDB

Имя: TEST

Основной ключ раздела: ID

Я прочитал, что эффективный способ очистки таблицы DynamoDB - это удалите таблицу и затем воссоздайте ее.

Итак, я написал это:

public bool DeleteAllRecords()
{
    DeleteTableRequest deleteTableRequest = new DeleteTableRequest
    {
       TableName = "TEST"
    };

    TableDescription tableDescription = _dynamoDbClient.DeleteTable(deleteTableRequest).TableDescription;

    CreateTableRequest createTableRequest = new CreateTableRequest
    {
        TableName = tableDescription.TableName,
        AttributeDefinitions = tableDescription.AttributeDefinitions,
        KeySchema = tableDescription.KeySchema,
        ProvisionedThroughput = new ProvisionedThroughput
        {
           ReadCapacityUnits = tableDescription.ProvisionedThroughput.ReadCapacityUnits,
           WriteCapacityUnits = tableDescription.ProvisionedThroughput.WriteCapacityUnits
        }
    };

    CreateTableResponse response = _dynamoDbClient.CreateTable(createTableRequest);

    return true;
}

Когда я запускаю вышеизложенное, я получаю это исключение.

2 проверки обнаружены ошибки: значение null в 'keySchema' не удовлетворяет ограничению: элемент не должен быть нулевым; Значение null в 'attributeDefinitions' не удовлетворяет ограничению: элемент не должен быть нулевым

Значения keySchema и attributeDefinitions, возвращаемые в tableDescription, являются пустыми списками. Если в таблице не было значений, для начала / где я могу получить эти значения; имея в виду, что они могут иметь значения в какой-то момент.

Ответы [ 2 ]

2 голосов
/ 10 февраля 2020

Учитывая асинхронный характер c большинства операций AWS, следующий поток будет правильным:

После запроса DeleteTable указанная таблица находится в состоянии DELETING, пока DynamoDB не завершит удаление. Если таблица находится в состоянии ACTIVE, вы можете удалить ее. Если таблица находится в состояниях CREATING или UPDATING, DynamoDB возвращает ResourceInUseException. Если указанная таблица не существует, DynamoDB возвращает ResourceNotFoundException. Если таблица уже находится в состоянии DELETING, ошибка не возвращается.

После получения запроса CreateTable DynamoDB немедленно возвращает ответ с TableStatus CREATING. После создания таблицы DynamoDB устанавливает для TableStatus значение ACTIVE. Операции чтения и записи можно выполнять только для таблицы ACTIVE.

[...] Вы можете использовать действие DescribeTable для проверки состояния таблицы.

  • DescribeTable до тех пор, пока TableStatus === 'ACTIVE'

Все цитаты взяты из ссылок, содержащихся в этом сообщении

0 голосов
/ 10 февраля 2020

Сначала вам нужно будет сделать DescribeTable. Это вернет значения, которые вы ищете. Ответ в операции DeleteTable в первую очередь предназначен для получения значения TableStatus.

Имейте в виду, что операция удаления не является мгновенной, поэтому вам необходимо проверить состояние таблицы перед создание новой таблицы. Если таблица все еще DELETING, вы не сможете создать новую таблицу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...