当分区未知时检索结果(但行键是)
retrieve a result when the partition is not known (but row key is)
在我的例子中(我碰巧每个条目只有两种类型,所以有 2 个分区,并且行键是唯一的)我可以编写一组遍历所有可能分区的迭代查询,如下所示:
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 存储表是否提供了一种有效的查询方式?
Does azure storage tables provide an efficient means to query when you
know only the row key?
对您的问题的简单回答是否定的,当您只知道 RowKey 时,没有有效的查询方式 table。 Table 服务将执行从一个分区到另一个分区的完整 table 扫描,并找到具有匹配 RowKey 的实体。
在您的情况下,您可能希望使用 TableQuery
to create your query and then either call ExecuteQuery
or ExecuteQuerySegmented
来获取查询结果。
TableQuery query = new TableQuery().Where("RowKey eq 'Your Row Key'");
var result = table.ExecuteQuery(query);
在我的例子中(我碰巧每个条目只有两种类型,所以有 2 个分区,并且行键是唯一的)我可以编写一组遍历所有可能分区的迭代查询,如下所示:
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 存储表是否提供了一种有效的查询方式?
Does azure storage tables provide an efficient means to query when you know only the row key?
对您的问题的简单回答是否定的,当您只知道 RowKey 时,没有有效的查询方式 table。 Table 服务将执行从一个分区到另一个分区的完整 table 扫描,并找到具有匹配 RowKey 的实体。
在您的情况下,您可能希望使用 TableQuery
to create your query and then either call ExecuteQuery
or ExecuteQuerySegmented
来获取查询结果。
TableQuery query = new TableQuery().Where("RowKey eq 'Your Row Key'");
var result = table.ExecuteQuery(query);