2012-12-27 71 views
1

我想查詢由Azure Diagnostics生成的WadPerformanceCountersTable,它具有基於刻度標記的PartitionKey,精確到分鐘。這個PartitionKey被存儲爲一個字符串(我沒有任何控制權)。以增量查詢WadPerformanceCountersTable?

我希望能夠根據此表查詢以獲得每分鐘,每小時,每天等的數據點,因此我不必拉取所有數據(我只是想要採樣來近似它)。我希望使用模數運算符來做到這一點,但由於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(); 

回答

0

我可以看到這樣做會創建一個進程,以保持在Azure表中同步與自己的另一個版本的唯一方法。在這張表中,我會將PartitionKey存儲爲一個數字而不是一個字符串。完成後,我可以使用類似於我在問題中編寫的方法來查詢數據。

但是,這是資源的浪費,所以我不推薦它。 (我自己也沒有實現。)

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(); 
+0

這與我目前所擁有的非常相似,除了你的限制爲10分鐘,只需要1條記錄。我需要的是從昨天開始獲得診斷信息,但是隻能在12:00,12:10,12:20等時間獲得診斷信息,而不是每分鐘一次。我可以看到我如何使用你的方法來做到這一點,但我必須對Azure表執行多次調用。 –