Azure Table Storage SDK - Очистить таблицу - PullRequest
0 голосов
/ 18 октября 2019

Это может показаться тривиальным вопросом, но мне трудно разобраться с этим. Мне просто нужно очистить таблицу хранения Azure с помощью .NET SDK.

Единственное, что я обнаружил, это следующее:

TableOperation deleteOperation = TableOperation.Delete(entity);
TableResult result = await table.ExecuteAsync(entity);

Для этого потребуется запросить всю таблицу и выполнить итерациюрезультаты, что с точки зрения производительности является необоснованным. Есть ли способ очистить всю таблицу?

Спасибо

Ответы [ 3 ]

1 голос
/ 19 октября 2019

Вы можете удалить всю таблицу следующим образом:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(storageConnectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
tableClient.DeleteTableIfExist("mytable");

Как указывает Гаурав, это делается асинхронно, поэтому, если вы хотите воссоздать таблицу, вам нужно будет использовать цикл while и продолжать пробовать каждое слово. 5с до создания.

1 голос
/ 18 октября 2019

Вы можете удалить таблицу и воссоздать ее. Однако имейте в виду, что удаление таблицы является асинхронной операцией на стороне хранилища и может занять не менее 30 секунд или более (в зависимости от данных). Пока таблица удаляется, вы не можете ее воссоздать.

Другой альтернативой является использование транзакций пакетной обработки сущностей и одновременное удаление 100 сущностей. Это будет быстрее, чем удаление отдельных объектов.

0 голосов
/ 22 октября 2019

Похоже, что метод DeleteTableIfExists для CloudTableClient был прекращен и перемещен в Microsoft.WindowsAzure.Storage.Table.CloudTable.

Я написал метод расширения EnsureTableIsEmpty, который удаляет и воссоздает таблицу, используя Полли, чтобы обеспечить базовую стратегию повторения. Ниже код:

public static async Task<CloudTable> EnsureTableIsEmpty(this CloudTable table)
{
    await table.DeleteIfExistsAsync();
    await Policy
        .Handle<StorageException>((exc) => { return exc.Message == "Conflict"; })
        .WaitAndRetryAsync(
            5,
            retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)),
            (exception, timeSpan, retryCount, context) =>
            {
                //Logging stuff
            })
        .ExecuteAsync(() => table.CreateIfNotExistsAsync());

    return table;
}

Работает вроде хорошо. Любое предложение или импровизация были бы хороши.

...