COSMOS DB集合中的多个分区

时间:2018-11-08 10:48:58

标签: azure-cosmosdb document-database azure-cosmosdb-sqlapi

1)我有一个Cosmos DB集合,其中包含约500k个文档,并且按属性“ SITEID”进行了分区。在查询请求选项中,只能传递一个分区键值。就我而言,我有疑问需要在(1,2,3,4)中执行SITEID,其中SiteID是分区键。

例如,我的SP如下:

SELECT * FROM c WHERE c.SITEID IN
("SiteId1","SiteId2","SiteId3","SiteId4","SiteId5")
AND c.STATUS IN ("Status1","Status2","Status3","Status4")

我正在使用下面的SQL API代码调用上面的SP。

await client.ExecuteStoredProcedureAsync<string>(UriFactory.CreateStoredProcedureUri("DBName", "CollectionName", "Sample"),new RequestOptions { PartitionKey = new PartitionKey("SiteId1") })

在上述SQL API代码中,PartitionKey属性仅支持Single值。我需要传递几个分区值的地方。还有其他选择吗?

2)“ EnableCrossPartitionQuery”属性仅在FeedOptions中可用,而在Request Options类中不可用。 Client.ExecuteStoredProcedureAsync仅支持RequestOptions参数,而不支持FeedOptions。现在,我需要一次在所有分区上执行存储过程。还有其他选项可以通过ExecuteStoredProcedureAsync方法传递EnableCrossPartitionQuery。

例如)

client.CreateDocumentQuery<Doc>(UriFactory.CreateDocumentCollectionUri("DBName", "CollectionName"), "select * from c", new FeedOptions { EnableCrossPartitionQuery = true }).ToList()


await client.ExecuteStoredProcedureAsync<string>(UriFactory.CreateStoredProcedureUri("DBName", "CollectionName", "Sample"),new RequestOptions { PartitionKey = new PartitionKey("WGC") })

1 个答案:

答案 0 :(得分:1)

只能对单个分区执行存储过程。您对此无能为力。

它们不被视为返回供稿的查询,而是可以返回任何类型的响应的请求。那就是他们他们没有使用FeedOptions而是使用RequestOptions

您仍然可以像普通文档查询一样执行查询,并将EnableCrossPartitionQuery设置为true。 Cosmos应该识别查询中的分区键,并将请求限制为特定的分区键值。

我之所以说应该,是因为this answer的确是这种情况,但有些评论则相反。我建议您检查有关集合点击量的指标。