在增量中查询WadPerformanceCountersTable?

时间:2012-12-27 19:29:34

标签: azure azure-table-storage diagnostics

我正在尝试查询Azure诊断生成的WadPerformanceCountersTable,它具有基于刻度标记的PartitionKey,精确到分钟。此PartitionKey存储为字符串(我无法控制)。

我希望能够查询此表以获取每分钟,每小时,每天等的数据点,因此我不必提取所有数据(我只想要抽样到近似它)。我希望使用模数运算符来执行此操作,但由于PartitionKey存储为字符串而且这是一个Azure表,因此我遇到了问题。

有没有办法做到这一点?

非工作示例:

var query =
            (from entity in ServiceContext.CreateQuery<PerformanceCountersEntity>("WADPerformanceCountersTable")
                where
                    long.Parse(entity.PartitionKey) % interval == 0 && //bad for a variety of reasons
                    String.Compare(entity.PartitionKey, partitionKeyEnd, StringComparison.Ordinal) < 0 &&
                    String.Compare(entity.PartitionKey, partitionKeyStart, StringComparison.Ordinal) > 0
                select entity)
                .AsTableServiceQuery();

2 个答案:

答案 0 :(得分:0)

如果您只想基于两个不同的时间间隔(现在和N回时)获得单行,您可以使用以下查询返回单行,如here所述:

// 10 minutes span Partition Key
DateTime now = DateTime.UtcNow;

// Current Partition Key
string partitionKeyNow = string.Format("0{0}", now.Ticks.ToString());

DateTime tenMinutesSpan = now.AddMinutes(-10);
string partitionKeyTenMinutesBack = string.Format("0{0}",   tenMinutesSpan.Ticks.ToString());

//Get single row sample created last 10 mminutes
CloudTableQuery<WadPerformanceCountersTable> cloudTableQuery =
    ( 
      from entity in ServiceContext.CreateQuery<PerformanceCountersEntity>("WADPerformanceCountersTable") 
      where 
           entity.PartitionKey.CompareTo(partitionKeyNow) < 0 && 
           entity.PartitionKey.CompareTo(partitionKeyTenMinutesBack) > 0 
        select entity
    ).Take(1).AsTableServiceQuery();

答案 1 :(得分:0)

我能看到这样做的唯一方法是创建一个进程,使Azure表与其自身的另一个版本保持同步。在此表中,我将PartitionKey存储为数字而不是字符串。完成后,我可以使用类似于我在问题中写的方法来查询数据。

然而,这是浪费资源,所以我不推荐它。 (我自己也没有实现它。)