通过分区的Cosmos db REST API顺序

时间:2018-05-08 18:36:30

标签: azure azure-cosmosdb

我使用REST API和SQL for Cosmos db,并且需要返回按时间戳排序的查询结果(存储为UNIX数字时间戳)。我试图通过简单的ORDER BY来做到这一点。

e.g. SELECT * FROM requests c ORDER BY c.timestamp

然而,通过分区我得到错误:

  

"使用TOP / ORDER BY或聚合函数的交叉分区查询不是   。支持"

在集合设置中,字符串的索引精度设置为-1,这是来自其他地方的建议,但仍然会抛出错误。

如果我将x-ms-documentdb-query-enablecrosspartition标头删除或设置为false,那么我得到:

  

"需要交叉分区查询但已禁用。请设置   x-ms-documentdb-query-enablecrosspartition为true,指定   x-ms-documentdb-partitionkey,或修改您的查询以避免这种情况   。例外"

有没有人通过SQL REST API做到这一点有什么成功?

感谢。

1 个答案:

答案 0 :(得分:3)

我在你身边重现你的问题。

enter image description here

但是,基于此官方statementjava sdk和node.js sdk支持对分区集合的TOPORDER BY查询。我通过sdk测试相同的查询,它可以工作。

enter image description here

更新答案:

我使用Flidder工具来观察SDK的请求,我发现了三个请求。

<强> 一:

当我运行上面的sdk代码时,第一个请求如下所示,并且收到的是完全相同的错误。但是,sdk会重试我获取分区的_rid属性。

enter image description here

<强> 两个

enter image description here

我没有找到关于此的任何明确的官方解释。但是,在阅读此article之后,我认为这里的交叉分区是指物理分区,而不是逻辑分区。因此,请求帮助我们获得&#34; rid&#34;您的数据存储在PartitionKeyRanges

中的物理分区

<强> 三:

enter image description here

然后sdk向我发送更新请求,附加属性:x-ms-documentdb-partitionkeyrangeid。并正确返回查询结果。请注意上一个请求中的更新sql。

我认为您可以效仿SDK为我们提供的满足您需求的请求。