0

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") })
4

1 回答 1

2

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

它们不被视为返回提要的查询,而是可以返回任何类型的响应的请求。那是他们不使用 ,FeedOptions而是使用RequestOptions.

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

我说应该是因为这个答案表明情况确实如此,但也有一些评论另有说法。我建议您检查有关收集点击量的指标。

于 2018-11-08T11:05:00.553 回答