1

我正在尝试查询由 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();
4

2 回答 2

0

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

不过这样很浪费资源,不推荐。(我自己也没有实现它。)

于 2013-01-07T19:16:17.320 回答
0

如果您只想根据两个不同的时间间隔(现在和 N 次)获取单行,则可以使用以下查询返回单行,如此所述:

// 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();
于 2012-12-27T22:31:55.027 回答