Azure 表存储续
Posted
技术标签:
【中文标题】Azure 表存储续【英文标题】:Azure table Storage continuation 【发布时间】:2015-03-13 09:08:18 【问题描述】:因此,Microsoft 决定将诊断数据发送到 Azure 表存储。我正在尝试查询此存储并将其发送到另一个位置以通过 C# SDK 进行分析。我可以很好地查询数十万条记录,但似乎他们发送的最后一个延续令牌将始终收到空响应。即使更多数据被发送到表存储中,我的延续令牌也不起作用,仍然会得到一个空延续令牌和空数据。
有人做过这样的事吗?如果他们发送的继续令牌被破坏,我如何继续“同步”天蓝色表数据?
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>());
【问题讨论】:
【参考方案1】:当没有更多数据要返回时,继续标记为空。当它不为空时,意味着在下一页中还有其他实体要返回。您可以检查 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);
【讨论】:
购买一个如何从我们到达的地方重新启动到上次停止的地方? (例如tail -f
行为?)
我知道这已经很晚了,但是您可以像这样创建BlobContinuationToken
的新实例:BlobContinuationToken token = new BlobContinuationToken() NextMarker = "[long_continuation_token_goes_here]" ;
。这将在那时开始您的请求并继续。以上是关于Azure 表存储续的主要内容,如果未能解决你的问题,请参考以下文章
使用 azure 数据工厂管道将 json 对象存储到 azure 表存储实体
Azure Functions - 使用 Azure Functions 的表存储触发器