假设我有一个给定的时间范围。为了解释方便,我们考虑一些简单的情况,像整个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
< p > < em > < code > 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
有没有一种方法能够填充整个给定的区间?就像InfluxDB有fill
参数用于分组或TimescaleDb的time_bucket()
函数与generate_series()
一样。我尝试搜索了ClickHouse文档和github问题,看起来这还没有实现,所以问题也许是是否有任何解决方法。