当分区未知(但行键为)时检索结果



在我的情况下(我碰巧每个条目只有两种类型,所以有两个分区,行键是唯一的(,我可以编写一组遍历所有可能分区的迭代查询,如下所示:

TableOperation retrieveOperation = TableOperation.Retrieve<JobStatus>(Mode.GreyScale.Description(), id);
TableResult query = await table.ExecuteAsync(retrieveOperation);
if (query.Result != null)
{
return new OkObjectResult((JobStatus)query.Result);
}
else
{
retrieveOperation = TableOperation.Retrieve<JobStatus>(Mode.Sepia.Description(), id);
query = await table.ExecuteAsync(retrieveOperation);
if (query.Result != null)
{
return new OkObjectResult((JobStatus)query.Result);
}
}
return new NotFoundResult();

问题是,这显然是低效的(想象一下,如果有数百种类型!(。当您只知道行键时,azure存储表是否提供了一种有效的查询方式?

当您只知道行键?

问题的简单答案是否定的,当您只知道RowKey时,就没有有效的方法来查询表。表服务将执行从一个分区到另一个分区的完整表扫描,并查找具有匹配RowKey的实体。

在您的情况下,您可能希望使用TableQuery来创建查询,然后调用ExecuteQueryExecuteQuerySegmented来获取查询结果。

TableQuery query = new TableQuery().Where("RowKey eq 'Your Row Key'");
var result = table.ExecuteQuery(query);

最新更新