如何在 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 有效地进行动态查询?
如何在 Python 中从 Azure 函数调用 Cosmos DB 存储过程?