2015-01-13 51 views
1

我试图访问$ 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长度。我究竟做错了什么?

+2

文档(http://msdn.microsoft.com/library/azure/hh343264.aspx)sais存储容量指标每天只更新一次。因此,如果您刚启用存储分析并尝试使用此代码,则它将返回0条记录。同时,您可以使用任何存储工具来检查表格内容并与您的代码进行比较以避免混淆。 – astaykov

回答

4

问题是,结果总是为0的长度。我究竟做错了什么?

您的代码对我来说确实很好。事实上,我在我的一个存储帐户中对此表运行此代码,并返回结果。您可能无法获得结果,因为表格中可能没有数据。您最近是否创建了存储帐户?给它一些时间,数据会显示出来。

替代的解决方案

此外,还有与存储分析数据工作的另一种方式,那就是通过使用存储客户端库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); 
     } 
+0

'Microsoft.WindowsAzure.Storage.CloudStorageAccount'不包含'CreateCloudAnalyticsClient'的定义。我错过了什么吗? –

+0

您使用的是哪个版本的库?这是在一个新版本中引入的。 –

+0

2.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;