如何使用Java SDK查询最近五分钟的Azure存储指标

如何使用Java SDK查询最近五分钟的Azure存储指标,java,azure,azure-storage,azure-java-sdk,Java,Azure,Azure Storage,Azure Java Sdk,我已经编写了一个独立的代码来获取Azure Storage Blob服务的指标,但我只想获取最后5分钟的指标如何从$MetricsMinutePrimary TransactionsBlob获取它请建议 CloudTable cloudMetric = tableClient.getTableReference(cloud .getHourMetricsTable(StorageService.BLOB).getName()); String pa

我已经编写了一个独立的代码来获取Azure Storage Blob服务的指标,但我只想获取最后5分钟的指标如何从$MetricsMinutePrimary TransactionsBlob获取它请建议

CloudTable cloudMetric = tableClient.getTableReference(cloud
                .getHourMetricsTable(StorageService.BLOB).getName());
        String partitionFilter2 = TableQuery.generateFilterCondition(
                "PartitionKey", QueryComparisons.EQUAL, "20170602T1400");
        String rowFilter3 = TableQuery.generateFilterCondition("RowKey",
                QueryComparisons.EQUAL, "user;All");
        String combinedFilter = TableQuery.combineFilters(partitionFilter2,
                Operators.AND, rowFilter3);
        TableQuery<MetricsPojo> partitionQuery2 = TableQuery.from(
                MetricsPojo.class).where(combinedFilter);
        for (MetricsPojo capacityMetrics2 : cloudMetric
                .execute(partitionQuery2)) {
            System.out.println(capacityMetrics2);
            System.out.println(capacityMetrics2.getPartitionKey() + "\n"
                    + capacityMetrics2.getRowKey() + "\n"
                    + capacityMetrics2.getTimestamp());
CloudTable cloudMetric=tableClient.getTableReference(云
.getHourMetricsTable(StorageService.BLOB).getName();
String partitionFilter2=TableQuery.generateFilterCondition(
“分割键”,QueryComparisons.EQUAL,“20170602T1400”);
字符串rowFilter3=TableQuery.generateFilterCondition(“RowKey”,
QueryComparisons.EQUAL,“user;All”);
String combinedFilter=TableQuery.combineFilters(partitionFilter2,
操作员(和,行过滤器3);
TableQuery分区Query2=TableQuery.from(
MetricsPojo.class)。其中(组合过滤器);
对于(MetricsPojo capacityMetrics2:cloudMetric
.执行(分区查询2)){
系统输出打印LN(容量测量2);
System.out.println(capacityMetrics2.getPartitionKey()+“\n”
+capacityMetrics2.getRowKey()+“\n”
+capacityMetrics2.getTimestamp());

现在没有简单的方法来查询最近5分钟的行。由于PartitionKey是以分钟为单位的时间戳,您可以为最近20分钟的行建议查询筛选器,并从本地结果中查找最近5分钟的行

TableQuery.combineFilters(
    TableQuery.generateFilterCondition("PartitionKey", QueryComparisons.GreaterThanOrEqual, "20170602T1400"),
    TableOperators.And,
    TableQuery.generateFilterCondition("PartitionKey", QueryComparisons.LessThanOrEqual, "20170602T1420"));

根据您的描述和@FrancisYu MSFT回复,我编写了一个示例代码并复制了您当前的版本

这是我的示例代码

String connectionString = String.format("DefaultEndpointsProtocol=http;AccountName=%s;AccountKey=%s", ACCOUNT_NAME, ACCOUNT_KEY);
CloudStorageAccount account = CloudStorageAccount.parse(connectionString);
CloudAnalyticsClient client = account.createCloudAnalyticsClient();
CloudTable metrics = client.getMinuteMetricsTable(StorageService.BLOB);
System.out.println(metrics.getName());
String queryString = TableQuery.combineFilters(
                TableQuery.generateFilterCondition("PartitionKey", QueryComparisons.GREATER_THAN_OR_EQUAL, "20170602T1400"),
                Operators.AND,
                TableQuery.generateFilterCondition("PartitionKey", QueryComparisons.LESS_THAN_OR_EQUAL, "20170602T1420"));
TableQuery<TableServiceEntity> query = TableQuery.from(TableServiceEntity.class).where(queryString);
for(TableServiceEntity entity : metrics.execute(query)) {
    System.out.println(entity.getPartitionKey()+"\t"+entity.getRowKey());
}
String connectionString=String.format(“DefaultEndpointsProtocol=http;AccountName=%s;AccountKey=%s”,ACCOUNT\u NAME,ACCOUNT\u KEY”);
CloudStorageAccount=CloudStorageAccount.parse(connectionString);
CloudAnalyticsClient=account.createCloudAnalyticsClient();
CloudTable metrics=client.getMinuteMetricTable(StorageService.BLOB);
System.out.println(metrics.getName());
字符串queryString=TableQuery.combineFilters(
TableQuery.generateFilterCondition(“PartitionKey”,QueryComparisons.GREATER_大于或等于,20170602T1400”),
等等,
TableQuery.generateFilterCondition(“PartitionKey”,QueryComparisons.LESS_THAN_或_EQUAL,“20170602T1420”);
TableQuery=TableQuery.from(TableServiceEntity.class).where(queryString);
for(表服务实体:metrics.execute(查询)){
System.out.println(entity.getPartitionKey()+“\t”+entity.getRowKey());
}
然后,我在运行代码时遇到了相同的问题,这是由于度量表
$metricsMinutePrimary TransactionsBlob
不存在引起的,因此您需要启用相关的
诊断
选项来创建它,如下图所示


Yu我按照u的建议尝试了,但代码给出了以下异常。java.util.NoSuchElementException:枚举结果时出错,请检查原始异常以了解详细信息。com.microsoft.azure.storage.core.lazymeditor.hasNext(lazymeditor.java:113)com.mindtree.azure.testing.main(testing.java:118)原因:com.microsoft.azure.storage.table.TableServiceException:未在com.microsoft.azure.storage.table.TableServiceException.generateTableServiceException(TableServiceException.java:52)中找到请通过编辑您的原始帖子进行更新。干杯。谢谢@Peter Pan,我已经按照您上面的建议激活了所有度量,现在没有错误,但也没有输出。激活后收集是否需要时间?另外,请建议我时间戳实际上是如何计算的ted的每小时指标,如我在分区键“20170602T1600”中看到的,时间戳是“2017年6月2日星期五22:51:56”我很困惑分区键不是现在的吗?我试了很多次,结果如下:分区键=20170605T1531 RowKey=system;所有时间戳=Mon Jun 05 21:02:24 IST 2017分区键=20170605T1533 RowKey=system;所有时间戳=Mon Jun 05 21:04:23 IST 2017分区键=20170605T1539 RowKey=system;所有时间戳=Mon Jun 05 21:10:24是T 2017 PartitionKey=20170605T1540 RowKey=system;所有时间戳=2017年6月5日周一21:11:24请解释PartitionKey的概念/区别,以及TimeStamp@AbhishekBA激活这些诊断选项后,在Azure存储上执行操作时,将记录度量数据。@AbhishekBA
TimeStamp
列是在。
PartitionKey
中的时间是发生日志/度量事件的实时时间。谢谢。我得到了从日志中收集分钟度量的概念。只有当我们访问日志时,才会收集日志并收集度量。请解释第二个问题PartitionKey和时间戳中的概念/区别这里,先谢谢你