我正在使用带有SQL for Cosmos db的REST API,并且需要返回按时间戳排序的查询结果(存储为UNIX数字时间戳) . 我试图通过简单的ORDER BY来做到这一点 .
e.g. SELECT * FROM requests c ORDER BY c.timestamp
但是通过分区我得到错误:
“不支持使用TOP / ORDER BY或聚合函数进行交叉分区查询 . ”
在集合设置中,字符串的索引精度设置为-1,这是来自其他地方的建议,但仍然会抛出错误 .
如果我删除或设置为false x-ms-documentdb-query-enablecrosspartition标头然后我得到:
“需要交叉分区查询但已禁用 . 请将x-ms-documentdb-query-enablecrosspartition设置为true,指定x-ms-documentdb-partitionkey,或修改查询以避免此异常 . ”
有没有人通过SQL REST API做到这一点有什么成功?
谢谢 .
1 回答
我在你身边重现你的问题 .
但是,基于此官方statement,
java
sdk和node.js
sdk支持对分区集合的TOP
和ORDER BY
查询 . 我通过sdk测试相同的查询,它的工作原理 .Update Answer:
我使用
Flidder
工具来观察来自SDK的请求,我发现包含了三个请求 .One:
当我运行上面的sdk代码时,第一个请求如下所示,并且收到的是完全相同的错误 . 但是,sdk会重试我来获取分区的
_rid
属性 .Two:
我没有找到关于此的任何明确的官方解释 . 但是,在读完这个article之后,我想这里的交叉分区是指物理分区,而不是逻辑分区 . 因此,请求帮助我们获取您的数据存储在的物理分区的"rid"和
PartitionKeyRanges
.Three:
然后sdk发送更新请求给我另外的属性:
x-ms-documentdb-partitionkeyrangeid
. 并正确返回查询结果 . 请注意上次请求中的更新sql .我认为您可以模仿SDK为我们提供的请求以满足您的需求 .