You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Digital Twin Query API 分页调用返回重复结果问题

问题根因

重复记录问题的核心原因是分页查询未指定稳定的全局排序规则,属于Azure Digital Twins查询分页机制的固有特性,和你token转义、请求体传参格式无关。
Azure Digital Twins底层为分布式存储架构,执行select * from digitaltwins这类不带ORDER BY子句的查询时,服务端不会对全量结果做全局固定排序。分页拉取时,不同存储分片的返回顺序可能出现偏移:当max-items-per-page设置值较小、需要多次分页拉取时,顺序偏移会直接导致部分记录被重复归入后续分页结果,极端场景下还会出现记录漏返回。你把max-items-per-page设为100(大于总结果数22)时,服务端单次请求即可返回全量结果,不需要跨分片多次扫描,自然不会出现重复。
你贴出的示例continuation token中,_pn字段标记的是分片扫描的偏移位置,在无全局固定排序的前提下,这个偏移对应的记录位置不是恒定的,这就是重复记录的直接来源。

解决方案
  • 所有需要分页的查询语句,必须加上基于唯一键的ORDER BY子句,最稳妥的排序键是孪生体全局唯一标识$dtId,将初始查询修改为:
SELECT * FROM digitaltwins ORDER BY $dtId ASC

加上固定全局排序后,服务端分页会严格按照排序键的固定位置返回结果,不会出现跨页顺序偏移,重复记录问题会直接消失。

  • 分页请求注意事项:携带continuation token发起后续请求时,不要在请求体重复传入query字段,也不要修改max-items-per-page请求头的取值,保持和首次发起查询时的参数完全一致,避免服务端重新计算分页位置导致异常。
  • 临时兜底方案:如果暂时不调整查询语句,可以在客户端拿到全量结果后,以$dtId为唯一键做去重,但该方案无法解决无排序导致的记录漏取问题,仅适合临时使用,长期场景必须加固定排序。
验证方式

保持max-items-per-page=3的设置,仅给查询语句加上ORDER BY $dtId后重新执行分页拉取,最终拿到的22条记录会完全无重复、无遗漏,和单页拉取100条的结果完全一致。

内容的提问来源于stack exchange,提问作者daz-fuller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 11:09:28