メインコンテンツへスキップ
ClickHouseには時系列データを扱うためのさまざまな方法があり、異なる時間範囲にまたがるデータポイントを集約、グループ化、分析できます。 このセクションでは、時間ベースのデータを扱う際によく使われる基本的な操作を説明します。 代表的な操作としては、データを時間インターバルごとにグループ化すること、時系列データの欠損を扱うこと、期間間の変化を計算することなどがあります。 これらの操作は、標準的なSQL構文とClickHouseの組み込み時間関数を組み合わせることで実行できます。 Wikistat (Wikipediaのページビュー・データ) データセットを使って、ClickHouseの時系列クエリ機能を見ていきましょう。
では、このテーブルに10億件のレコードを挿入してみましょう:

時間バケットで集計する

最も一般的なのは、一定期間ごとにデータを集計することです。たとえば、各日の hits の合計を取得する場合です。
ここでは、指定した時刻を日付型に変換するtoDate()関数を使用しています。別の方法として、1時間単位でまとめ、特定の日付でフィルタすることもできます。
ここで使用しているtoStartOfHour()関数は、指定した時刻をその時間帯の先頭時刻に変換します。 年、四半期、月、日単位でグループ化することもできます。

任意のグループ化インターバル

toStartOfInterval() 関数を使うと、5 分ごとなど、任意のインターバルでグループ化することもできます。 たとえば、4 時間ごとのインターバルでグループ化したいとします。 グループ化の間隔は INTERVAL 句で指定できます。
または、toIntervalHour() 関数を使用できます
どちらの場合でも、次の結果が得られます。

空のグループを補完する

多くの場合、欠損した時間帯を含むスパースなデータを扱います。その結果、空のバケットが生じます。次の例では、データを1時間単位でグループ化します。これにより、一部の時間帯の値が欠けた、次のような統計が出力されます。
ClickHouse には、これに対処するための WITH FILL 修飾子があります。これにより、空いている時間帯がすべて 0 で補完され、時間の経過に伴う分布をより把握しやすくなります。

ローリング時間ウィンドウ

日や時間の始まりのようなインターバルの開始時点ではなく、一定幅の時間ウィンドウを扱いたい場合があります。 たとえば、日単位ではなく、午後6時を基準にした24時間単位のウィンドウごとの合計 hits を把握したいとします。 参照時刻と各レコードの時刻との差を計算するには、date_diff() 関数を使用できます。 この場合、day カラムは日数の差 (例: 1日前、2日前 など) を表します。
最終更新日 2026年6月10日