假设我有一个给定的时间范围。为了解释,让我们考虑一些简单的事情,比如 2018 年全年。我想从 ClickHouse 查询数据作为每个季度的总和聚合,因此结果应该是 4 行。
问题是我只有两个季度的数据,所以在使用时GROUP BY quarter
,只返回两行。
SELECT
toStartOfQuarter(created_at) AS time,
sum(metric) metric
FROM mytable
WHERE
created_at >= toDate(1514761200) AND created_at >= toDateTime(1514761200)
AND
created_at <= toDate(1546210800) AND created_at <= toDateTime(1546210800)
GROUP BY time
ORDER BY time
1514761200
– 2018-01-01
1546210800
–2018-12-31
这将返回:
time metric
2018-01-01 345
2018-04-01 123
我需要:
time metric
2018-01-01 345
2018-04-01 123
2018-07-01 0
2018-10-01 0
这是简化的示例,但在实际用例中,聚合将是例如。5 分钟而不是宿舍,并且 GROUP BY 至少还有一个属性,就像GROUP BY attribute1, time
这样期望的结果是
time metric attribute1
2018-01-01 345 1
2018-01-01 345 2
2018-04-01 123 1
2018-04-01 123 2
2018-07-01 0 1
2018-07-01 0 2
2018-10-01 0 1
2018-10-01 0 2
有没有办法以某种方式填充整个给定的间隔?就像 InfluxDBfill
对 group 或 TimescaleDb 的time_bucket()
函数有参数一样,generate_series()
我尝试搜索 ClickHouse 文档和 github 问题,似乎这还没有实现,所以问题可能是是否有任何解决方法。