我试图访问$ 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长度。我做错了什么?
答案 0 :(得分:4)
问题是,结果总是0长。我做错了什么?
您的代码看起来不错。事实上,我在我的一个存储帐户中对此表运行此代码并返回结果。您可能无法获得任何结果,因为表中可能没有数据。您最近是否创建了存储帐户?给它一些时间,数据会显示出来。
替代解决方案
此外,还有另一种使用Storage Analytics数据的方法,即在存储客户端库中使用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);
}
答案 1 :(得分:0)
这是在Asp.NET Core 1.1中使用Microsoft.WindowsAzure.Storage版本8.1.1.0的另一种替代解决方案。
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;