8

与えられた時間範囲があるとします。説明のために、2018 年全体のような単純なものを考えてみましょう。結果が 4 行になるように、各四半期の合計集計として ClickHouse からデータをクエリしたいのです。

問題は、2 つの四半期のデータしかないため、 を使用するGROUP BY quarterと 2 行しか返されないことです。

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

15147612002018-01-01
15462108002018-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 には、次のような属性が少なくとも 1 つある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 の問題を検索しようとしましたが、これはまだ実装されていないようなので、問題はおそらく回避策があるかどうかです。

4

4 に答える 4