1

Azure Diagnosticsによって生成された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

2つの異なる時間間隔(現在と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 に答える
0

これを行うために私が見ることができる唯一の方法は、Azureテーブルをそれ自体の別のバージョンと同期させるプロセスを作成することです。このテーブルでは、PartitionKeyを文字列ではなく数値として格納します。完了したら、質問で書いたのと同様の方法を使用してデータをクエリできます。

ただし、これはリソースの浪費であるため、お勧めしません。(私も自分で実装していません。)

于 2013-01-07T19:16:17.320 に答える