Azure cosmosdb 如何在没有不确定结果的情况下编写Azure Cosmos DB SQL-API计数不同查询

Azure cosmosdb 如何在没有不确定结果的情况下编写Azure Cosmos DB SQL-API计数不同查询,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我的目标 我想使用SQLAPI在单个分区中计算Azure Cosmos DB文档的文件名的不同值的数量,如下所示 { id:一些uuid, 文件名:file-1.txt, PartitionKeyField:一些键, ……其他领域。。。 } 我的测试 我上传了533956个文件,其中包含500000个不同的文件名值,即33956个文件具有重复的文件名,其他字段则不同。这些都是使用相同的PartitionKeyField上传的 我只能在10万个文档中重现以下行为 我想计算不同文件名值的数量——所以

我的目标

我想使用SQLAPI在单个分区中计算Azure Cosmos DB文档的文件名的不同值的数量,如下所示

{ id:一些uuid, 文件名:file-1.txt, PartitionKeyField:一些键, ……其他领域。。。 } 我的测试

我上传了533956个文件,其中包含500000个不同的文件名值,即33956个文件具有重复的文件名,其他字段则不同。这些都是使用相同的PartitionKeyField上传的

我只能在10万个文档中重现以下行为

我想计算不同文件名值的数量——所以希望能得到500000

尝试0-健全性检查

如果我运行以下查询:

选择不同的c.FileName 来自c 其中c.PartitionKeyField='some key' 这将按预期返回500000个文档

尝试1

但是,我不需要所有文档,我只需要计数,所以我尝试运行以下查询

选择值COUNT1 从…起 选择不同的c.FileName 来自c 其中c.PartitionKeyField='some key' c2 但这给出了533956,也就是说,好像没有应用DISTINCT

尝试2

接下来,我尝试了以下冗余分组方式,试图强制计数工作:

选择c2.PartitionKeyField,COUNT1 从…起 选择不同的c.FileName 来自c 其中c.PartitionKeyField='some key' c2 按c2.PartitionKeyField分组 此操作返回的结果取决于分配给集合的RU数量,例如

在9900时返回500007 返回5000 RUs时的500175 在3000 RUs时返回500441 在1000 RUs时返回500812 在400处返回501406 此外,上述值是平均值,例如,对于9900 RUs,还返回了500009和500006的结果

问题

是否可以以不依赖于RU数量的确定方式编写所需的计数查询?除了在尝试0中检索所有文档之外? 为什么增加RU的数量会改变尝试2中的查询结果? 请尝试以下SQL:

SELECT VALUE COUNT(c2)
FROM (
    SELECT DISTINCT c.FileName 
    FROM c 
    WHERE c.PartitionKeyField = 'some key'
) c2
请尝试以下SQL:

SELECT VALUE COUNT(c2)
FROM (
    SELECT DISTINCT c.FileName 
    FROM c 
    WHERE c.PartitionKeyField = 'some key'
) c2

谢谢你的建议。不幸的是,这仍然给出了不正确的结果,例如500523关于此SQL如何?从SELECT c.FileName FROM c中选择值COUNTc2,其中c.PartitionKeyField='some key'组BY c.FileName c2我找到了一个关于此的答案。这是一个错误。谢谢你的建议。不幸的是,这仍然给出了不正确的结果,例如500523关于此SQL如何?从SELECT c.FileName FROM c中选择值COUNTc2,其中c.PartitionKeyField='some key'组BY c.FileName c2我找到了一个关于此的答案。这是一只虫子。