首页 文章

通过分区的Cosmos db REST API顺序

提问于
浏览
1

我正在使用带有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 回答

  • 2

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

    enter image description here

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

    enter image description here


    Update Answer:

    我使用 Flidder 工具来观察来自SDK的请求,我发现包含了三个请求 .

    One:

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

    enter image description here

    Two:

    enter image description here

    我没有找到关于此的任何明确的官方解释 . 但是,在读完这个article之后,我想这里的交叉分区是指物理分区,而不是逻辑分区 . 因此,请求帮助我们获取您的数据存储在的物理分区的"rid"和 PartitionKeyRanges .

    Three:

    enter image description here

    然后sdk发送更新请求给我另外的属性: x-ms-documentdb-partitionkeyrangeid . 并正确返回查询结果 . 请注意上次请求中的更新sql .

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

相关问题