如何通过$ MetricsCapacityBlob获得blob大小

时间:2015-01-13 10:35:55

标签: c# azure azure-storage

我试图访问$ 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 个答案:

答案 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;