如何通过 $MetricsCapacityBlob 获取 blob 大小

How to get blobs size through $MetricsCapacityBlob

我正在尝试访问 $MetricsCapacityBlob(SO:Azure Storage Table size)以查看我的 Azure 帐户中 blob 的总大小。这是我的:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);

var cloudTableClient = storageAccount.CreateCloudTableClient();

var table = cloudTableClient.GetTableReference("$MetricsCapacityBlob");

var query = new TableQuery();
var result = table.ExecuteQuery(query).ToList();

问题是,result 的长度始终为 0。我做错了什么?

Problem is, result is always 0 length. What am I doing wrong?

我觉得你的代码没问题。事实上,我在我的一个存储帐户中 运行 此代码针对此 table 并且它返回了结果。您可能得不到返回结果,因为 table 中可能没有数据。您最近是否创建了存储帐户?给它一些时间,数据就会显示出来。

备用解决方案

此外,还有另一种处理存储分析数据的方法,即使用存储客户端库中的 AnalyticsClient 命名空间。请参阅下面的示例代码,它获取昨天的存储大小。

CloudStorageAccount account = new CloudStorageAccount(new StorageCredentials(StorageAccount, StorageAccountKey), true);
var client = account.CreateCloudAnalyticsClient();
var yesterday = DateTime.UtcNow.Date.AddDays(-1).ToString("yyyyMMddT0000");
var queryResult = client.CreateCapacityQuery().Where(q => q.PartitionKey == yesterday).ToList();
foreach (var item in queryResult)
{
    Console.WriteLine(item.RowKey + " = " + item.Capacity);
}

这是另一个使用 Microsoft.WindowsAzure.Storage 版本 8.1.1.0 in Asp.NET Core 1.1 的替代解决方案。

CloudTableClient tableClient = _storageAccount.CreateCloudTableClient();
CloudTable metricsCapacityTable = tableClient.GetTableReference(Constants.AnalyticsConstants.MetricsCapacityBlob);

List<string> selectedColumns = new List<string>();
selectedColumns.Add("Capacity");

string yesterday = DateTime.UtcNow.Date.AddDays(-1).ToString("yyyyMMddT0000");
                
dataResult = await metricsCapacityTable.ExecuteAsync(TableOperation.Retrieve(yesterday, "data", selectedColumns));
                
DynamicTableEntity ddte = (DynamicTableEntity)dataResult.Result;
double? dataValueInBytes = ddte.Properties["Capacity"].Int64Value;