Azure Table 存储 SDK - 清空 table

Azure Table Storage SDK - Empty a table

这似乎是一个微不足道的问题,但我很难弄明白。 我只需要使用 .NET SDK 清空 Azure 存储 Table。

我唯一找到的是以下内容:

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

这将需要查询整个table并对结果进行迭代,这在性能方面是不合理的。有什么方法可以清空整个 table?

谢谢

您可以删除 table 并重新创建它。但是请记住,删除 table 是存储端的异步操作,可能需要至少 30 秒或更长时间(取决于数据)。在删除 table 期间,您无法重新创建它。

另一种方法是使用 Entity Batch 事务并一次删除 100 个实体。这将比删除单个实体更快。

您可以像这样删除整个 table:

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

正如 Gaurav 指出的那样,这是异步完成的,因此如果您想重新创建 table,您将需要使用 while 循环并继续尝试每 5 秒直到创建成功。

CloudTableClient 上的 DeleteTableIfExists 方法似乎已停用并移至 Microsoft.WindowsAzure.Storage.Table.CloudTable

我写了一个扩展方法 EnsureTableIsEmpty,它使用 Polly 删除并重新创建 table 以提供基本的重试策略。代码下方:

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;
}

它运行良好。任何建议或改进都会很好。