如何在 Azure Cosmos DB 的一个查询中选择多个聚合值

Posted

技术标签:

【中文标题】如何在 Azure Cosmos DB 的一个查询中选择多个聚合值【英文标题】:How to select several aggregate values in one query in Azure Cosmos DB 【发布时间】:2018-09-11 08:33:04 【问题描述】:

我正在尝试从一个查询中的集合中选择最小时间戳和最大时间戳。

所有变体,例如

 SELECT value min(c._ts), value max(c._ts) FROM c
 SELECT value min(c._ts), max(c._ts) FROM c
 SELECT values min(c._ts), max(c._ts) FROM c

产生类似的错误

: "code":400,"body":"\"code\":\"BadRequest\",\"message\":\"Message: \\\"errors\\\":[\\\"severity\\\":\\\"Error\\\",\\\"location\\\":\\\"start\\\":23,\\\"end\\\":24,\\\"code\\\":\\\"SC1001\\\",\\\"message\\\":\\\"Syntax error, incorrect syntax near ','.\\\"]\\r\\nActivityId: ad845eae-8b97-4f24-b372-dd5ce8f4d2a6, Microsoft.Azure.Documents.Common/2.0.0.0\"","activityId":"ad845eae-8b97-4f24-b372-dd5ce8f4d2a6" 

Azure Cosmos DB 中是否有这种可能性?

【问题讨论】:

【参考方案1】:

查看documentation关于 value 关键字的内容,看起来您不能在一个查询中拥有多个 value 关键字。

如果你在 select 语句中有一个逗号,那么你会得到一个错误。

听起来像 UDF 或 SP 是更适合您的问题的解决方案。

请记住,像 select max(c._ts), min(c._ts) from c 这样的东西会抛出错误:Cross partition query only supports 'VALUE <AggreateFunc>' for aggregates

这表明如果您指定分区,那么您将能够使其正常工作,但我只是尝试指定分区键,但仍然失败并出现同样的错误。

【讨论】:

以上是关于如何在 Azure Cosmos DB 的一个查询中选择多个聚合值的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 LINQ 针对 Azure Cosmos Document DB SQL API 有效地进行动态查询?

Azure Cosmos DB 如何按一系列值进行分组

如何在 Python 中从 Azure 函数调用 Cosmos DB 存储过程?

通过 MongoAPI 对 Azure Cosmos DB 进行聚合查询时出现意外错误

Azure 数据工厂和 Cosmos DB

如何从 Service Fabric Mesh 连接到 Azure Cosmos DB