返回 Windows Azure 表查询的 1000 多个实体



我的问题正是这个。但是,Azure 存储 API 已更改,我能找到的有关此问题的所有答案都涉及旧版本。如何处理在当前 API 版本中返回超过 1000 个项目的查询?获取少于 1000 个项目的查询如下所示:

var query = new TableQuery<TermScoreEntity>()
            .Where(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal,    Name));
var table = _tableClient.GetTableReference("scores");
foreach (var termScoreEntity in table.ExecuteQuery(query))            
    result.Add(termScoreEntity.RowKey, termScoreEntity.Score);

您是否尝试过使用上述代码检索 1000 多个实体?我认为使用简单的ExecuteQuery就足够了。

文档只说它对纯 REST 请求有 1,000 个限制,ExecuteQuery API 内部使用此 rest API,但自动削减到多个请求,每个请求都有 1,000 个限制。

因此,如果您使用 .NET 包,则无需担心此限制,库已经为您处理了此问题。您可以参考此线程以获取更多信息。

下面是从 Azure SDK ExecuteQuery的一些关键代码,如果不指定take数字,你会发现实际上最大数字是9223372036854775807L

internal IEnumerable<DynamicTableEntity> Execute(CloudTableClient client, CloudTable table, TableRequestOptions requestOptions, OperationContext operationContext)
{
  CommonUtility.AssertNotNullOrEmpty("tableName", table.Name);
  TableRequestOptions modifiedOptions = TableRequestOptions.ApplyDefaults(requestOptions, client);
  operationContext = operationContext ?? new OperationContext();
  return CommonUtility.LazyEnumerable<DynamicTableEntity>((Func<IContinuationToken, ResultSegment<DynamicTableEntity>>) (continuationToken =>
  {
    TableQuerySegment<DynamicTableEntity> local_0 = this.ExecuteQuerySegmented((TableContinuationToken) continuationToken, client, table, modifiedOptions, operationContext);
    return new ResultSegment<DynamicTableEntity>(local_0.Results)
    {
      ContinuationToken = (IContinuationToken) local_0.ContinuationToken
    };
  }), this.takeCount.HasValue ? (long) this.takeCount.Value : long.MaxValue);
}

您的代码看起来正确,并且看起来基本与 http://azure.microsoft.com/en-us/documentation/articles/storage-dotnet-how-to-use-tables/#retrieve-all-entities 相同 - "如何:检索分区中的所有实体"

您确定该分区中有 1000 多个实体吗? 您可以通过几种不同的方式进行检查:

  1. 使用 Visual Studio 或其他一些存储资源管理器运行相同的查询,并查看获得的结果数。
  2. 在运行代码时使用 Fiddler,并查看响应中是否返回了继续标记。 如果有继续标记,则您使用的代码应自动遵循它们并创建新请求。 如果没有继续标记,则意味着没有更多与查询匹配的实体。

最新更新