如何在 Azure Cosmos DB 中按日期对数据进行分组?

问题描述 投票:0回答:1

我正在构建一个分析工具,我正在使用 Azure function 和 Azure Cosmos 来做后端。

该工具正在运行,但某些小部件太重,需要从 Cosmos 检索太多数据。因此,我没有从 Cosmos 获取大量数据,然后在前端(javascript)解析这些数据,而是得出的结论是我需要做相反的事情。但这些查询在 SQL 中管理起来相当复杂。

基本拓扑是当访问者开始观看视频时,我创建了一个“播放”类型的日志(Cosmos DB 中的条目)。稍后我可以获取一段时间内的所有“播放”日志,并在 Javascript 中操作数据来获取每分钟的播放次数,如下所示:

const results = [
  "2021-04-15T15:47:34": 3,
  "2021-04-15T15:47:35": 7,
  "2021-04-15T15:47:36": 2,
  "2021-04-15T15:47:37": 13,
  //and so on
]

然后我使用这些数据制作一个图表,显示每分钟的播放次数

我现在在 Azure 中使用的查询是:

SELECT c.id,c.date,c.type
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")

它返回给我:

      {
        "id": "0eef48c0-a797-4461-8d59-0a8a5d546c1c",
        "date": "2021-04-15T12:35:29.118Z",
        "type": "Load"
      },
      {
        "id": "b52b0a35-99ab-4e17-a2d3-9f638501c97f",
        "date": "2021-04-15T12:35:29.164Z",
        "type": "Load"
      },
      {
        "id": "ce2d5326-06a9-4d0b-9eb2-8cede6ada7eb",
        "date": "2021-04-15T12:35:29.164Z",
        "type": "Load"
      },
      {
        "id": "dd0a225c-1806-4c08-a5a4-c65f092e3928",
        "date": "2021-04-15T12:35:29.187Z",
        "type": "Load"
      },

有什么方法可以在 Cosmos 中构建这样的查询来获取:

const results = [
  "2021-04-15T15:47:34": 3,
  "2021-04-15T15:47:35": 3,
  "2021-04-15T15:47:36": 3,
  "2021-04-15T15:47:37": 3,
  //and so on
]

直接来自查询?

我进行了搜索,但没有找到任何关于 Cosmos 上按日期分组的真正清晰的信息。

azure azure-cosmosdb azure-cosmosdb-sqlapi
1个回答
1
投票

您可以尝试一次下面的查询,它可能会根据属性略有不同,但可以用于通过计数进行分组。只是添加日期应该匹配,包括时间戳,以便下面的查询正常工作,否则计数可能会有所不同。

更新:

select d.newdate,d.cnt  from
(SELECT left(c.date,16) as newdate,count(c.date) as cnt FROM c
WHERE c.type = 'Load' and (c.date between '2021-03-04T12:31:30.233Z' AND '2021-07-31T21:59:59.999Z')
group by left(c.date,16)) d

结果(更新):

[
    {
        "newdate": "2021-04-15T12:35",
        "cnt": 7
    },
    {
        "newdate": "2021-04-15T12:36",
        "cnt": 3
    }
]

然后您可以在 JavaScript 中相应地使用这些数据。

© www.soinside.com 2019 - 2024. All rights reserved.