Предположим, у меня есть заданный диапазон времени. Для объяснения, давайте рассмотрим что-то простое, например, весь 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
Есть ли способ как-нибудь заполнить весь данный интервал? Как InfluxDB имеет fill
аргумент для группы или TimescaleDb time_bucket()
функция с generate_series()
Я пытался искать документацию ClickHouse и проблемы с GitHub, и кажется, что это еще не реализовано, поэтому вопрос, возможно, заключается в том, есть ли обходной путь.