0

因此,Microsoft決定將診斷數據發送到Azure表存儲。我試圖查詢這個存儲並通過C#SDK將它發送到另一個位置進行分析。我可以很好地查詢數十萬條記錄,但看起來他們發送的最後一個連續令牌總是會收到一個空響應。即使更多的數據被髮送到表存儲器中,我的延續標記也不起作用,仍然會得到一個空的延續標記並返回空數據。Azure表存儲延續

有沒有人做過這樣的事?如果他們發送的繼續令牌被破壞,我如何繼續「同步」天藍色的表格數據?

  public static List<PerfMonEntity> GetEventData(ref TableContinuationToken contToken) 
    { 
     CloudStorageAccount storageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]); 
     CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 
     CloudTable eventLogsTable = tableClient.GetTableReference("WADPerformanceCountersTable"); 
     TableQuery<PerfMonEntity> query = new TableQuery<PerfMonEntity>(); 

     var l = new List<PerfMonEntity>(); 
     var segment = eventLogsTable.ExecuteQuerySegmented(query, contToken ?? new TableContinuationToken()); 
     foreach (PerfMonEntity wadCounter in segment) 
     { 
      l.Add(wadCounter); 
     } 
     contToken = segment.ContinuationToken; 

     if (contToken == null) 
     { 
      Console.WriteLine("contToken is NULL!"); 
      return null; 
     } 

     Console.WriteLine("partkey: {0}", contToken.NextPartitionKey ?? ""); 
     Console.WriteLine("rowkey: {0}", contToken.NextRowKey ?? ""); 

     return l; 
    } 

- = - = - = - = - = -

 while (num < loop) 
     { 
      List<PerfMonEntity> eleList = AzurePerfTable.GetEventData(ref contToken); 
      if (eleList != null) 
       returnedList.AddRange(eleList); 
      else 
       num = loop; 
      num += 1; 

      if (contToken != null) 
       AZContinuationToken.SetContToken(contToken); 

      Console.WriteLine("returnedlistsize: {0}", returnedList.Count<PerfMonEntity>()); 
     } 

回答

0

的延續標記爲空時,有沒有更多的數據返回。當它非空時,表示在下一頁中還有其他實體可以返回。您可以檢查null以確定何時檢索到最後一頁,然後退出循環。

嘗試沿着這些線路寫你的邏輯:

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnectionString")); 

CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 

CloudTable eventLogsTable = tableClient.GetTableReference("WADPerformanceCountersTable"); 
TableQuery query = new TableQuery(); 

Console.WriteLine("List perf counter results in pages:"); 

TableContinuationToken token = null; 

do 
{ 
    var segment = eventLogsTable.ExecuteQuerySegmented(query, token, null, null); 

    foreach (var wadCounter in segment) 
    { 
     Console.WriteLine(wadCounter.PartitionKey); 
     Console.WriteLine(wadCounter.RowKey); 
     Console.WriteLine(wadCounter.Timestamp); 
    } 

    token = segment.ContinuationToken; 
} 
while (token != null); 
+0

購買如何從那裏我們得到了它最後一次停止做一個重新開始? (例如'尾巴-f'行爲?) – ChrisF

+0

我知道這是在遊戲中後期,但你可以這樣創建BlobContinuationToken'的'一個新的實例:'BlobContinuationToken令牌=新BlobContinuationToken(){NextMarker =「[long_continuation_token_goes_here] 「};'。這將在那時開始您的請求並繼續。 –