如何在Azure Cosmos DB中按日期分组查询直接获取各时段视频播放量
Cosmos DB按时间分组统计播放量实现方法
完全可以通过Cosmos DB原生SQL查询直接实现按时间分组的统计,不需要拉取全量数据到前端处理。
核心实现思路
你存储的date字段是标准ISO 8601格式字符串,可通过LEFT函数截取到对应时间精度,再配合GROUP BY分组+COUNT聚合即可直接得到统计结果。
示例查询语句
按秒统计(匹配你给出的结果示例精度)
SELECT LEFT(c.date, 19) AS timePoint, COUNT(1) AS playCount FROM c WHERE c.liveId = "{ID}" AND c.type = "Play" AND c.date BETWEEN "2021-06-04T12:31:30.233Z" AND "2021-07-31T21:59:59.999Z" GROUP BY LEFT(c.date, 19)
按分钟统计(符合你提到的每分钟播放量需求)
只需修改截取长度为16即可:
SELECT LEFT(c.date, 16) AS timePoint, COUNT(1) AS playCount FROM c WHERE c.liveId = "{ID}" AND c.type = "Play" AND c.date BETWEEN "2021-06-04T12:31:30.233Z" AND "2021-07-31T21:59:59.999Z" GROUP BY LEFT(c.date, 16)
结果转换
查询返回的结果结构是数组,每个元素格式如下:
[{"timePoint": "2021-04-15T15:47:34", "playCount": 3}, ...]
你可以在Azure Function后端用几行代码遍历转换为你需要的键值对格式,无需前端做任何处理。
注意事项
- 上述语法仅适用于Cosmos DB SQL API,其他API不支持
- 建议为
liveId、type、date三个字段配置复合索引,可大幅降低大数量查询时的RU消耗,提升查询速度 - 如需其他统计精度,调整
LEFT函数的截取长度即可:按小时取前13位、按天取前10位
内容的提问来源于stack exchange,提问作者geosigno
相关产品推荐
相关产品推荐

