Azure cosmosdb CosmosDB SQL API,仍在尝试获取分区及其大小的列表

Azure cosmosdb CosmosDB SQL API,仍在尝试获取分区及其大小的列表,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我在StackOverflow上看到了很多答案,说微软的Cosmosdb根本不支持获取分区键列表。这一直困扰着我,因为对于任何数据存储来说,获取逻辑分区名称和大小的列表似乎都是一种zeroith要求——任何其他数据存储都会提供表大小之类的内容,我不敢相信微软会放弃这一点 我不认为他们会这样做,所以它不能被记录(或者至少记录得很好)。在以下代码中: var client = new DocumentClient( endpoint,

我在StackOverflow上看到了很多答案,说微软的Cosmosdb根本不支持获取分区键列表。这一直困扰着我,因为对于任何数据存储来说,获取逻辑分区名称和大小的列表似乎都是一种zeroith要求——任何其他数据存储都会提供表大小之类的内容,我不敢相信微软会放弃这一点

我不认为他们会这样做,所以它不能被记录(或者至少记录得很好)。在以下代码中:

var client = new DocumentClient(
                    endpoint,
                    authKey

Database db = client.CreateDatabaseQuery().Where(d => d.Id == databaseName).AsEnumerable().FirstOrDefault();

//Sure is a lot of verbose faff.  Have to keep specifying things you've already basically specified when you initialized the client...
var collection = client.CreateDocumentCollectionQuery(databaseSelfLink).Where(c => c.Id == myCollectionName).ToArray().FirstOrDefault();

//This yields "/$pk" in the value - so I guess there's just one path, 
//but I still have a lot of distinct values in that path.  
//I try a DocumentQuery next to drill down.
var partitionKeys = collection.PartitionKey.Paths;  

var querySpec = new SqlQuerySpec("SELECT DISTINCT c.PartitionKey FROM c");
var test = client.CreateDocumentQuery(collection.SelfLink, querySpec);

当我在最后一行之后断点并查看测试对象时,我看到它有a-k子对象,每个子对象都有一个整数值。我不确定这些是什么,但它们可能是分区和大小吗?有没有更好的办法把他们拉出来?

我有一点答案,虽然不是完整的。因此,我不会标记这个问题的答案

我发现这个文件:

下面是一些修改后的代码,用于回调分区和大小。根据上面的文档,它只保证在大于1GB的分区上进行报告,尽管到目前为止我看到的最小报告分区是42MB:

var client = new DocumentClient(
                    endpoint,
                    authKey
Database db = client.CreateDatabaseQuery().Where(d => d.Id == databaseName).AsEnumerable().FirstOrDefault();
var collection = client.CreateDocumentCollectionQuery(databaseSelfLink).Where(c => c.Id == myCollectionName).ToArray().FirstOrDefault();
collection = await client.ReadDocumentCollectionAsync(
            collection.SelfLink,
            new RequestOptions { PopulatePartitionKeyRangeStatistics = true });
        Console.WriteLine(collection.PartitionKeyRangeStatistics.ToString());

现在我要做的就是用报告的分区名称和大小解析字符串。关于动态创建新分区,以使系统在使用完全配置的RUs时能够正确扩展,我还有更多的问题要回答。

好的,我可能没有按预期返回结果-当我在查询末尾添加.ToArray(),.ToList(),.ToDictionary()时,我返回了一个异常“语法错误,“DISTINCT”附近的语法不正确,错误代码为“SC1001”。一大堆谷歌搜索结果让人们在论坛上谈论聚合查询在CosmosDB上不起作用。好吧,我想我已经彻底了解了。自从CosmosDB问世以来,人们要求DISTINCT已经有4年了(不知道为什么微软发布的产品没有最基本的功能)虽然微软表示它支持聚合,但distinct不在CosmosDB SQL API的聚合函数中。根据我能找到的最新文档,至少目前不在其中:这是该文档中聚合的确切标题-不支持distinct:我已经遇到一个填充了的分区。我的计划是或者,这将为该分区实现生存时间——CosmosDB提供了一种服务,它可以在不占用RU的情况下清除过期的文档。